Я пытаюсь захватить stdout из вызова subprocess.Popen, и, хотя я этого легко достигаю, делая:
cmd = subprocess.Popen('ls -l', shell=True, stdout=PIPE)
for line in cmd.stdout.readlines():
print line
Я хотел бы захватить stdout в "реальном времени". С помощью вышеуказанного метода PIPE ожидает, чтобы захватить все stdout, а затем он возвращается.
Итак, для целей ведения журнала это не соответствует моим требованиям (например, "см.", что происходит, когда это происходит).
Есть ли способ получить строку за строкой, stdout во время работы? Или это ограничение subprocess (нужно подождать, пока закрывается PIPE).
ИЗМЕНИТЬ
Если я переключу readlines() для readline(), я получаю только последнюю строку stdout (не идеально):
In [75]: cmd = Popen('ls -l', shell=True, stdout=PIPE)
In [76]: for i in cmd.stdout.readline(): print i
....:
t
o
t
a
l
1
0
4