7

渡された文字列をラテックスを使用してpdfファイルとしてコンパイルするためのpython関数をいくつか作成しました。この機能は期待どおりに機能し、非常に便利なので、改善方法を探しています。

私が持っているコード:

def generate_pdf(pdfname,table):
    """
    Generates the pdf from string
    """
    import subprocess
    import os

    f = open('cover.tex','w')
    tex = standalone_latex(table)   
    f.write(tex)
    f.close()

    proc=subprocess.Popen(['pdflatex','cover.tex'])
    subprocess.Popen(['pdflatex',tex])
    proc.communicate()
    os.unlink('cover.tex')
    os.unlink('cover.log')
    os.unlink('cover.aux')
    os.rename('cover.pdf',pdfname)

コードの問題は、後で削除される作業ディレクトリにcoverという名前のファイルの束が作成されることです。

作業ディレクトリに不要なファイルを作成しないようにするには?

解決

def generate_pdf(pdfname,tex):
"""
Genertates the pdf from string
"""
import subprocess
import os
import tempfile
import shutil

current = os.getcwd()
temp = tempfile.mkdtemp()
os.chdir(temp)

f = open('cover.tex','w')
f.write(tex)
f.close()

proc=subprocess.Popen(['pdflatex','cover.tex'])
subprocess.Popen(['pdflatex',tex])
proc.communicate()

os.rename('cover.pdf',pdfname)
shutil.copy(pdfname,current)
shutil.rmtree(temp)
4

1 に答える 1

9

一時ディレクトリを使用します。一時ディレクトリは常に書き込み可能で、再起動後にオペレーティング システムによって消去できます。tempfileライブラリを使用すると、安全な方法で一時ファイルとディレクトリを作成できます。

path_to_temporary_directory = tempfile.mkdtemp()
# work on the temporary directory
# ...
# move the necessary files to the destination
shutil.move(source, destination)
# delete the temporary directory (recommended)
shutil.rmtree(path_to_temporary_directory)
于 2013-10-30T13:26:12.610 に答える