为什么pdflatex在作为Python子进程调用时不起作用?

时间:2011-08-15 15:49:54

标签: python subprocess pdflatex

我正在尝试在我的Python脚本中实现一个函数来自动编译TeX文件。我正在尝试使用subprocess module;这就是我正在做的事情:

def createpdf(output):
    args = ['pdflatex', output, '-interaction=nonstopmode']

    process = subprocess.call(args,
                    stdout = subprocess.PIPE,
                    stderr = subprocess.PIPE,
                    stdin  = subprocess.PIPE)

当我在终端中使用我的TeX文件运行pdflatex时,它编译得很好。但是当我运行我的Python脚本时,它不会编译。似乎编译过程开始,但几分钟后,它没有任何理由停止。我查看了日志文件,它没有打印任何错误消息。

1 个答案:

答案 0 :(得分:1)

当您将输出管道设置为subprocess.PIPE时,子进程会创建一个缓冲区来保存子进程的输出,直到您的进程读取它为止。如果您从未从process.stdoutprocess.stderr读取,则pdflatex可以填充缓冲区并阻止。

您需要discard their output或只需致电subprocess.call(args),让它们流经您的程序输出。