Я пытаюсь захватить 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