Почему я не могу забрать мой журнал?

В моем сценарии python у меня есть следующее:

count = 0 while 1: print count count += 1 

Я сохранил этот файл, и я его запустил.

 nohup python count.py >> test.log & $tail -f test.log 

Ничего не появляется, когда я его хвост.

Когда вы перенаправляете вывод Python, stream stdout открывается в буферизованном режиме (вместо режима с буферизацией). Это означает, что вывод сохраняется в памяти до тех пор, пока до сброса буфера не будет напечатано достаточно строк.

Чтобы сразу увидеть строки, вам необходимо очистить выходной stream:

 import sys count = 0 while 1: print count sys.stdout.flush() count += 1 

В качестве альтернативы, используйте ключ командной строки -u чтобы принудительно небуферизованный ввод-вывод:

 nohup python -u count.py >> test.log & 

или вы можете использовать переменную среды PYTHONUNBUFFERED :

 PYTHONUNBUFFERED=1 nohup python count.py >> test.log & 

или повторно открыть дескриптор файла stdout в небуферизованном режиме:

 import os import sys sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0) 

В Python 3.3 и все это немного проще; вы просто скажете print() для очистки:

 print(count, flush=True) 

Это связано с тем, что запись на стандартный вывод буферизуется по умолчанию. Вы ничего не увидите, пока буфер не заполнится или дескриптор файла не будет сброшен или закрыт.