Ответ 1
Похоже, вам нужно периодически обновлять stdout (например, sys.stdout.flush()
). В моем тестировании Python автоматически не делает это даже при print
, пока программа не выйдет.
Я использую следующую команду для запуска python script в фоновом режиме:
nohup ./cmd.py > cmd.log &
Но похоже, что nohup ничего не пишет в файл журнала. cmd.log создается, но всегда пуст. В python script я использую sys.stdout.write
вместо print
для печати на стандартный вывод. Я делаю что-то неправильно?
Похоже, вам нужно периодически обновлять stdout (например, sys.stdout.flush()
). В моем тестировании Python автоматически не делает это даже при print
, пока программа не выйдет.
Вы можете запустить Python с флагом -u
, чтобы избежать буферизации вывода:
nohup python -u ./cmd.py > cmd.log &
Использование "-u" с "nohup" сработало для меня. Все будет сохранено в файле nohup.out. Нравится this-
nohup python -u your_code.py &
Вы также можете сохранить его в свой каталог. Это way-
nohup python -u your_code.py > your_directory/nohup.out &
export PYTHONUNBUFFERED=1
nohup ./cmd.py > cmd.log &
или
nohup python -u ./cmd.py > cmd.log &
Python 3.3 и выше имеет аргумент flush для печати, и это единственный метод, который работал для меня.
print("number to train = " + str(num_train), flush=True)
print("Using {} evaluation batches".format(num_evals), flush=True)
У меня была похожая проблема, но не связанная с процессом Python. Я запускал скрипт, который выполнял nohup, и скрипт периодически запускался через cron.
Я смог решить проблему следующим образом:
PS: мои скрипты были написаны на ksh, работающем на RHEL