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

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

[root@archlinux ~]# nohup python3 wannoo.py &
[1] 22617
[root@archlinux ~]# nohup: ignoring input and appending output to 'nohup.out'

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

[root@archlinux ~]# ps -aux | grep python | grep -v grep
root     22617  0.5  0.0   9792  7052 pts/0    S    01:27   0:00 python3 wannoo.py

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

[root@archlinux ~]# nohup python3 wannoo.py > wannoo.log 2>&1 &
[1] 22618

有在目录里看到了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.,能够无缓冲地输出信息。

[root@archlinux ~]# nohup python3 -u wannoo.py > wannoo.log 2>&1 &
[1] 22618

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


Python3.7.1

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

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