我想使用Python構建一個LaTeX文檔,但在順序運行命令時遇到問題。對於那些熟悉LaTeX的人,你會知道你通常必須運行四個命令,每個命令在運行下一個命令之前完成。從Python運行命令序列
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變量的bug;它不應該有一個「.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}
}
如果使用[接受來自該線程的答案](http://stackoverflow.com/questions/359347/execute-commands-sequentially- in-python/359506#359506)使用[Popen.wait()](http://docs.python.org/library/subprocess.html?highlight=subprocess#subprocess.Popen.wait),這應該工作。 – crashmstr
我認爲這看起來很有前途,但說實話,我並不真正遵循代碼示例。對於一個簡單的任務來說,2個類似乎很多代碼。 – jkeirstead
[來自utdemir的答案](http://stackoverflow.com/questions/7365319/run-commands-sequential-from-python/7365350#7365350)更簡單。但是調用與Popen(...)非常相似,然後在返回的對象上調用wait()。 – crashmstr