使用nohup在后台执行python程序时需要增加-u选项才能马上通过print()输出日志

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用nohup在后台执行python程序时需要增加-u选项才能马上通过print()输出日志相关的知识,希望对你有一定的参考价值。

参考技术A

2019-06-12 遇到的一点小问题
用python3写了个爬虫程序,需要在后台运行,所以使用 nohup命令 执行。

因为控制台返回的数据只有 PID nohup: ignoring input and appending output to ‘nohup.out’ ,不确定python程序是否有正常开启,打算去查看当前目录下的 nohup.out文件 ,看一下输出,但是竟然没有找到。
使用 ps命令 看了一下,还有在运行。

使用 kill命令 杀掉进程,再查看文件夹就能看到 nohup.out文件 了,也看到了print()输出。
不确定是不是 nohup.out文件 的原因,把输出重定向再试一下:

有在目录里看到了 wannoo.log文件 ,使用 tail -n 10 wannoo.log 命令查看文件最后10行,结果只看到一句 nohup: ignoring input 。刷了几次,还是一样的结果。想起 tail命令 里面有个 -f 选项,如果文件有增长,可以马上在控制台看到。所以又用 tail -f wannoo.log 等了很久,结果还是一样。
网上找了下 ,才知道原来 python3命令 有个 -u 选项 Force the stdout and stderr streams to be unbuffered. This option has no effect on the stdin stream. ,能够无缓冲地输出信息。

重新试了,可以马上看到输出信息了。

测试过程中有使用 jobs 命令来查看后台任务,使用 fg 命令将任务移动到前台,使用 Ctrl+C 停止任务;或者使用 Ctrl+Z 暂停任务,然后使用 bg 将任务移动到后台。顺便记录一下。

后台运行程序命令备忘

当程序执行时间比较长,我们需要使得程序在后台运行,终端关闭与否不影响程序的执行情况。此时,则可以使用nohup命令,nohup(NO HangUP)就是不挂起的意思。

nohup ./pso > pso.file 2>&1 &

上述命令的意思是将pso直接放在后台运行,并把终端标准输出和错误输出都存放在当前目录下的pso.file文件中。

以上是关于使用nohup在后台执行python程序时需要增加-u选项才能马上通过print()输出日志的主要内容,如果未能解决你的问题,请参考以下文章

nohup 详解 Python不挂断运行后台程序

Liunx 设置后台执行python程序

nohup 后台不挂断运行程序

在linux后台执行脚本

shell脚本定时后台执行

Linux和Windows启动后台程序