为什么在Python子进程中调用pdflatex无效?
我正在尝试在我的Python脚本中实现一个功能,目的是自动编译一个TeX文件。我正在使用subprocess模块,这是我目前的做法:
def createpdf(output):
args = ['pdflatex', output, '-interaction=nonstopmode']
process = subprocess.call(args,
stdout = subprocess.PIPE,
stderr = subprocess.PIPE,
stdin = subprocess.PIPE)
当我在终端中用pdflatex命令编译我的TeX文件时,一切正常。但是当我运行我的Python脚本时,它却没有编译成功。看起来编译过程开始了,但过了几分钟后就停止了,没什么原因。我查看了日志文件,里面没有打印出任何错误信息。
1 个回答
1
当你把输出管道设置为 subprocess.PIPE
时,子进程会创建一个缓冲区,用来存放子进程的输出,直到你的程序去读取这些输出。如果你从来没有读取 process.stdout
和 process.stderr
,那么 pdflatex 可能会把这个缓冲区填满,导致程序卡住。
你需要么是 丢弃它们的输出,要么直接调用 subprocess.call(args)
,让输出直接通过你的程序流出。