Python脚本输出到控制台,即使它在后台运行

时间:2010-01-31 16:11:09

标签: linux background pipe

我在后台运行python脚本,但为什么它仍会打印到控制台,即使是通过管道传输到文件?

我尝试了以下命令:

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

我尝试了一个简单的脚本:

print "hello world"

使用

python script.py &

它仍会打印到控制台。

但是

python script.py > output.txt &

按预期工作,不会打印到控制台。

5 个答案:

答案 0 :(得分:7)

可能是在stderr上输出。试试这个:

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

或者看起来您可能已经启动了仍在运行的后台任务:

python script.py &

键入fg将其置于前台,然后使用Ctrl-C将其终止。

答案 1 :(得分:2)

应该是

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

有关2>&1

用法的说明,请参阅this

答案 2 :(得分:2)

有时甚至这还不够。某些应用程序写入/ dev / console而不是/ dev / stdout或/ dev / stderr。提示输入密码的应用程序通常会这样做。

答案 3 :(得分:2)

python的问题在于它会缓冲stdout而不会将其丢弃到磁盘上。你需要像那样运行你的脚本

python -u script.py > output.txt &

或者您可以使用无缓冲输出(unbuffered stdout in python (as in python -u) from within the program

答案 4 :(得分:1)

您是否打印到标准输出或标准错误?这是两个不同的流。

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