Когда вы перенаправляете вывод Python, поток stdout
открывается в буферном режиме (вместо режима с линейной буферизацией). Это означает, что вывод сохраняется в памяти до тех пор, пока до сброса буфера не будет напечатано достаточно строк.
Чтобы увидеть линии сразу, вам нужно очистить выходной поток:
import sys
count = 0
while 1:
print count
sys.stdout.flush()
count += 1
В качестве альтернативы, используйте переключатель -u
командной строки, чтобы заставить небуферизованный I/O:
nohup python -u count.py >> test.log &
или вы можете использовать PYTHONUNBUFFERED
переменная среды:
PYTHONUNBUFFERED=1 nohup python count.py >> test.log &
или re-o перо stdout
указатель_на_файл в небуферизованном режиме:
import os
import sys
sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)
В Python 3.3 и выше это все немного проще; Вы просто скажите print()
промывать:
print(count, flush=True)
Я запустил ваш скрипт и сделал хвост ... он работает отлично. у вас есть что-то еще. – tdelaney