Компиляция latex из python
Я сделал некоторую функцию python для компиляции переданной строки как pdf файл с использованием latex. Функция работает так, как ожидалось, и была довольно полезной, поэтому я ищу способы ее улучшить.
код, который у меня есть:
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)
проблема с кодом, что он создает кучу файлов с именем покров в рабочем каталоге, которые впоследствии удаляются.
Как избежать создания ненужных файлов на рабочем каталог?
решение
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)
1 ответов
использовать временный каталог. Временные каталоги всегда доступны для записи и могут быть очищены операционной системой после перезагрузки. 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)