Я запускаю сценарий для управления процессами на удаленной машине (SSH). Давайте назовем это five.pyВывод скриптов python, отображаемых только при завершении при использовании SSH?
#!/usr/bin/python
import time, subprocess
subprocess.call('echo 0',shell=True)
for i in range(1,5):
time.sleep(1)
print(i)
Если я в настоящее время запустить
ssh [email protected] five.py
Я хотел бы видеть на выходе
0
1
2
3
4
появляющимся на моем стандарте из второй по второй (как он выполняется, если выполняется локально). Что происходит: я получаю 0 из «эха» сразу, а остальные появляются сразу после завершения всей программы. (Не помогает вложить «five.py» в скрипт bash, чтобы вызвать его «python five.py» или использовать «print >> sys.stdout, i»).
Это должно быть связано с тем, как питон пишет в стандартный вывод, так как другие программы ведут себя вполне нормально .. функциональный обходной путь является
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()
Но должно быть лучшим решением, чем изменить все мои заявления печати!
Большое спасибо: sys.stdout = os.fdopen (sys.stdout.fileno(), 'w', 1) 'работает очень хорошо и должно быть более безопасным, чем' python -u ' –