# 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 для перенаправления на стандартный вывод.