从Python顺序运行命令

时间:2011-09-09 17:33:12

标签: python

我正在尝试使用Python构建一个LaTeX文档,但是在按顺序运行命令时遇到了问题。对于那些熟悉LaTeX的人,你会知道你通常必须运行四个命令,每个命令在运行下一个命令之前完成,例如。

pdflatex file
bibtex file
pdflatex file
pdflatex file

在Python中,我这样做是为了定义命令

commands = ['pdflatex','bibtex','pdflatex','pdflatex']
commands = [(element + ' ' + src_file) for element in commands]

但问题是运行它们。

我试图从this thread中解决问题 - 例如在循环中使用os.system() subprocess,例如map(call, commands)Popen,并将列表折叠为由&分隔的单个字符串 - 但它似乎是命令全部作为单独的进程运行,无需等待前一个进程完成。

为了记录,我在Windows上但想要一个跨平台的解决方案。

修改
问题是指定src_file变量的错误;它不应该有“.tex”。以下代码现在可以使用:

test.py

import subprocess

commands = ['pdflatex','bibtex','pdflatex','pdflatex']

for command in commands:
    subprocess.call((command, 'test'))

test.tex

\documentclass{article}
\usepackage{natbib}

\begin{document}
This is a test \citep{Body2000}.
\bibliographystyle{plainnat}
\bibliography{refs}
\end{document}

refs.bib

@book{Body2000,
  author={N.E. Body},
  title={Introductory Widgets},
  publisher={Widgets International},
  year={2000}
}

1 个答案:

答案 0 :(得分:5)

os.system不应该导致此问题,但subprocess.Popen应该。

但我认为使用subprocess.call是最好的选择:

commands = ['pdflatex','bibtex','pdflatex','pdflatex']

for command in commands:
    subprocess.call((command, src_file))