1

私はサブプロセスでghostscriptを実行していますが、エラーをキャプチャできないように見えることを除いて、うまく機能しています。

import subprocess

cmd = 'gs -dSAFER -dNOPAUSE -dBATCH -sDEVICE=jpeg -sOutputFile=img-%d.jpeg -r150 -g600x600 sample.pdf'
p = subprocess.Popen(cmd.split(), shell=False, stderr=subprocess.PIPE)

stderr = p.communicate()

print stderr

私の問題は、コマンドが正しく実行されるかどうか、またはstderrが常に等しいかどうかです。

(なし、 '')

stdoutとstderrの両方を指定して2回目の試行を行いました

p = subprocess.Popen(slide_cmd.split(), shell=False, stdin=PIPE, stdout=PIPE, stderr=STDOUT)

p.stdoutは出力を提供しますが、p.stderrは引き続きNoneを返します

4

1 に答える 1

3

Ghostscriptは、次のような致命的なエラーの要約を除いて、ほとんどSTDOUTに書き込むようです。

GPL Ghostscript 8.71: Unrecoverable error, exit code 1

最終的にSTDERRになります。したがって、STDOUTも読むと、すべてをキャプチャできるはずです。

これをデバッグするために、サブプロセスを使用してPythonで実行しているコマンドを出力し、シェルでIOリダイレクトを使用して出力をファイルにリダイレクトし、そのストリームでGSが何を出力するかを確認します。例えば:gs [args] 2>stderr.txt 1>stdout.txt

ちなみに、引数リストをトークン化するshlex.split()代わりにを使用する必要があります。サブプロセスのドキュメントでこのメモを参照してください。str.split()

2番目のサイト注:文字列フォーマット()を使用して「sample.pdf」を実際のファイル名に置き換え始めたら、代わりにを使用して(PythonではなくGSによって解釈されることを意図しているためcmd % filename)必ずエスケープしてください。%d%%d

于 2012-09-04T20:55:29.570 に答える