2011-07-25 7 views
2

Sweave/LaTeXドキュメントをPDFに変換するためのPythonスクリプトを作成しました。Pythonでos.system呼び出しによって生成されたLaTeX警告/エラーを検出して処理する

os.system("""echo "Sweave('%s.Rnw')" | R --vanilla --quiet"""%topic) 

seq = ['p','b','p','b','p','p'] 
for op in seq: 
    if op is 'p': 
     os.system('pdflatex %s'%topic) 
    if op is 'b': 
     os.system('bibtex %s'%topic) 
    if op is 'l': 
     os.system('latex %s'%topic) 

エラーがない場合、これは素晴らしい作品が、LaTeXの誤差がある場合、私はLaTeXの例のためのCLIにもたらしています、

[10] 
! You can't use `macro parameter character #' in vertical mode. 
l.625 # 

? 

私は、必要があります。ここで最も重要な部分ですこれを手動で打ち破る。 os.system呼び出しがLaTeXでエラーを生成し、この呼び出しを終了してもエラーテキストを捕捉していることをPythonに「知らせる」方法がありますか?

+0

Pythonでエラーテキストをキャプチャする方法を見つけましたか? – benregn

+0

はい - を使用してエラーメッセージにアクセスできます。pdftex_process = subprocess.Popen(['pdflatex'、 '-interaction = nonstopmode'、 '%s'%topic]、shell = False、stdout = subprocess.PIPE) ()メソッドをpdftex_processオブジェクトに追加します。 –

答えて

4
  1. os.systemを使用しないでください。代わりにsubprocessモジュールを使用してください。
  2. pdflatexには、非対話モード(おそらくbatchmodeまたはnonstopmode IIRCが必要ですが、それぞれのオプションが何をしているかを確認することができます)にすることができます。-interactionスイッチがあります。
+0

はい、文字列補間を使用するプログラムを使用して、引数が引数として渡される 'subprocess'を使用してください。 –

1

LaTeXに-interaction=nonstopmodeフラグを渡します。

関連する問題