# cmd = "python subscript.py"
cmd = "ping localhost -n 10"
ofile =open("C:\file.log","w")
sp = subprocess.Popen(cmd,bufsize = 1, stdout = subprocess.PIPE, stderr = subprocess.PIPE)
while True:
sp.poll()
line = sp.stdout.readline()
#eline = sp.stderr.readline()
if line:
print line
ofile.write(line)
#if eline:
# print eline
# ofile.write(" ERROR: "+line)
# if (line == "" and eline == ""):
if (line == ""):
break
私はサブプロセスから出力を取得し、上記のコードを使用してログファイルに保存しようとしています。それはping localhost -n 10
のためにうまくいきます。しかし、subscript.py
を呼び出すためにそれを使用すると、subscript.py
の出力をリアルタイムで得ることができません。私はsubscript.py
の終了後にすべての出力を得るでしょう。なにか提案を?また、私はそれを動作させるためにeline = sp.stderr.readline()
をコメントアウトする必要があります。なぜいくつかのコードは私にsubscript.py
のリアルタイム出力を与えないだろうか?Popenからリアルタイム出力を取得
subscript.py:
import time
i=0
while (i<5):
time.sleep(1)
i += 1
print "ouput:",i
ルービックは前に尋ねた夫婦同様の質問があります述べたように。私は見つけたものすべてを試してみて、誰も私の問題を解決しませんでした。いくつかの理由は、subscript.py
を呼び出すときに動作しない理由を指すことを願っています。
編集: ここに問題があります:subscript.pyの出力は、自身が終了するまでフラッシュされませんでした。 subscript.pyにはstderrがないため、sp.stderr.readline()を呼び出すと無限の待機が発生します。 ソリューション: すべてのstderrのサブスクリプトの の出力をフラッシュします。stderr = subprocess.STDOUTを使用してstdoutにリダイレクトします。
可能な重複:http://stackoverflow.com/questions/803265/getting-realtime-output-using-subprocess – rubik
他の重複:http://stackoverflow.com/questions/1085071/real-time-intercepting-of -stdout-from-other-process-in-pythonです。実際には重複した*がたくさんあります。検索するだけです。 http://stackoverflow.com/questions/527197/intercepting-stdout-of-a-subprocess-while-it-is-running – rubik
私は検索し、私がstackoverflowで見つけたすべてのコードを試しました。ここの鍵は、2番目のpythonスクリプトを呼び出すときに同じコードがうまくいかないことです。 – wang