2011-09-09 27 views
0

Pythonを使用してLaTeXドキュメントを作成しようとしていますが、コマンドを順番に実行するのに問題があります。 LaTeXに精通している方には、通常は4つのコマンドを実行しなければならないことがわかります。 PythonでPythonから順番にコマンドを実行

pdflatex file 
bibtex file 
pdflatex file 
pdflatex file 

、私はこのためのコマンド

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

を定義するためにこれをやっているが、問題は、それらを実行しています。

this thread –のようなものを取り除こうとしました。ループ内でos.system()を使用すると、map(call, commands)またはPopenのようなものが& –で区切られた単一の文字列に折りたたまれていますが、前のコマンドを完了するのを待たずにコマンドがすべて別々のプロセスとして実行されているようです。

私はWindows上ですが、クロスプラットフォームのソリューションが好きです。

EDIT
問題がSRC_FILE変数をspeciyfingのバグでした。それは ".tex"を持つべきではありません。次のコードは動作するようになりました:

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

(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

+0

私は有望だと思ったが正直言って、私は実際にコード例に従っていない。 2つのクラスは、単純なタスクのための多くのコードのようです。 – jkeirstead

+0

[answer from utdemir](http://stackoverflow.com/questions/7365319/run-commands-sequential-from-python/7365350#7365350)は簡単です。呼び出しはPopen(...)とほぼ同じで、返されたオブジェクトに対してwait()を呼び出します。 – crashmstr

答えて

5

os.system

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はこれを引き起こすことはありませんが、subprocess.Popenはすべき。

しかし、私はsubprocess.callを使用することが最良の選択だと思う:あなたは[そのスレッドから受け入れ答え]を使用している場合

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

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

いいえ - それはそれらを順番に実行しません。 LaTeX文書にはまだ相互参照がありません。 (マニュアルビルドでソースファイルをチェックしました) – jkeirstead

+0

これはすべきです。あなたのコードに別の問題があるはずです。 – utdemir

+0

そうです! src_file文字列に 'tex'拡張子を付けると、bibtexコンパイルが中断されます。私は上記の変更を加えました。 – jkeirstead

関連する問題