# 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
в реальном времени?
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 () вызывает бесконечное ожидание. Решение: сбросить вывод в subscript.py для всего stderr, я просто использую stderr = subprocess.STDOUT для перенаправления на stdout.