Python-скрипт выводит на консоль, даже если он работает в фоновом режиме - PullRequest
5 голосов
/ 31 января 2010

Я запускаю сценарий python в фоновом режиме, но почему он по-прежнему печатается на консоль, даже когда передается в файл?

Я попробовал следующую команду:

python script.py &
python script.py > output.txt &

Я пробовал с помощью простого скрипта:

print "hello world"

С

python script.py &

Он по-прежнему печатается на консоли.

Но

python script.py > output.txt &

работает как задумано и не выводится на консоль.

Ответы [ 5 ]

7 голосов
/ 31 января 2010

Возможно, это вывод на stderr. Попробуйте это:

python script.py > output.txt 2>&1 &

Кроме того, похоже, что вы, возможно, запустили фоновую задачу, которая все еще выполняется:

python script.py &

Введите fg, чтобы вывести его на передний план, а затем убейте его с помощью Ctrl-C.

2 голосов
/ 20 августа 2015

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

python -u script.py > output.txt &

Или вы можете использовать небуферизованный вывод ( небуферизованный стандартный вывод в python (как в python -u) из программы )

2 голосов
/ 31 января 2010

Даже этого иногда недостаточно. Некоторые приложения пишут в / dev / console вместо / dev / stdout или / dev / stderr. Приложения, запрашивающие пароль, часто делают это.

2 голосов
/ 31 января 2010

Если бы это было

python script.py > output.txt 2>&1 & 
python script.py >> output.txt 2>&1 

См. это для разъяснения по использованию 2>&1

1 голос
/ 31 января 2010

Вы печатаете на стандартный вывод или на стандартную ошибку? это два разных потока.

Program 2> file # pipe standard error
Program 2>&1 # pipe standard error to standard output (join streams)
Program > file 2>&1 # pipe both channels to file
...