我有一个程序,我正在一个一个地创建大量 LaTeX 文件。在创建这些 LaTeX 文件以检查它们是否可以实际编译为 .pdf 文件时,这一点很重要。
为此,它使用subprocess.call(['pdflatex', '-halt-on-error', tex_file_name])
.
0
从 a.tex
到 a的成功编译返回.pdf
,否则返回 1。
我遇到的问题是,这行代码没有做我认为应该做的唯一情况是在py.test
运行它时。如果我从解释器运行此代码,或从命令行运行脚本,它就可以工作。但 py.test 没有。
发生错误时py.test
,它会留下一个由 创建的日志文件pdflatex
,其中包含以下错误:
{c:/texlive/2012/texmf-var/fonts/map/pdftex/updmap/pdftex.map
!pdfTeX error: pdflatex.exe (file c:/texlive/2012/texmf-var/fonts/map/pdftex/up
dmap/pdftex.map): fflush() failed (Bad file descriptor)
==> Fatal error occurred, no output PDF file produced!
我在这里冒险猜测在能够编译它之前对文件做py.test
一些事情。但我不知道是什么。.tex
pdflatex
py.test 文档中讨论了临时文件和目录。我不知道它们是否与我的问题有关,但我只是简单地玩过它们。
如果您想查看代码,测试用例如下所示:
from a import Foo
from b import Tree
from latex_tester import latex_tester
def test_Foo():
q1 = foo.Foo()
latex_tester(Tree(1, q1))
和 latex_tester 看起来像这样:
import uuid
import os
import subprocess
def latex_tester(tree):
""" Test whether latex is compilable to a PDF.
"""
full_path = r'some_path'
uid = str(uuid.uuid1())
file_name = os.path.join(full_path, 'test' + uid + '.tex')
with open(file_name, 'w') as f:
_write_tree(f, tree)
retcode = subprocess.call(['pdflatex', '-halt-on-error', file_name])
if retcode != 0:
raise RuntimeError("This latex could not be compiled.")