Я запускаю скрипт для управления процессами на удаленной (SSH) машине. Давайте назовем это five.py
#!/usr/bin/python
import time, subprocess
subprocess.call('echo 0',shell=True)
for i in range(1,5):
time.sleep(1)
print(i)
Если я сейчас запусту
ssh user@host five.py
Хотелось бы увидеть вывод
0
1
2
3
4
появляется в моем стандарте секунду за секундой (как это происходит, если выполняется локально) .. Что происходит: я сразу получаю 0 из "echo", а остальное появляется только сразу после завершения всей программы. (Не помогает вкладывать 'five.py' в скрипт bash; вызывать его как 'python five.py'; или использовать 'print >> sys.stdout, i').
Это должно быть связано с тем, как python пишет в стандартный вывод, поскольку другие программы ведут себя вполне нормально. Функциональное решение -
import time, subprocess
import sys
subprocess.call('echo 0',shell=True)
for i in range(1,5):
time.sleep(1)
sys.stdout.write(str(i)+'\n')
sys.stdout.flush()
Но должно быть лучшее решение, чем изменение всех моих операторов печати!