我是靠谱客的博主 潇洒冬天,这篇文章主要介绍linux后台运行python3程序(并解决print无法输出到.out文件的问题)linux后台运行python3程序(并解决print无法输出到.out文件的问题),现在分享给大家,希望可以做个参考。
linux后台运行python3程序(并解决print无法输出到.out文件的问题)
复制代码
1
2
3(记录自己在服务器上后台运行某程序时的过程,以备日后留用.) 描述: 需要在远程的服务器上运行个python3文件, 并在关闭终端后该程序仍在运行
0.所用示例
本文采用的python文件test.py,内容如下:
复制代码
1
2
3
4
5
6
7from time import sleep i = 0 while 1: print(i) i += 1 sleep(1)
1.将程序转到后台运行的办法
将程序转到后台运行的办法我了解到的有以下:
1.用ctrl+z挂起这个程序,然后用 bg %作业号 命令将该程序转到后台
(该方式在关闭终端时会发送hang up信号将后台的任务结束,所以不符合我的需求)
如:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25$ python3 test.py 输出: 0 1 2 (此时按下ctrl+z,会显示该程序被挂起的信息,[]内为作业号) [1]+ 已停止 python3 test.py (用 bg %作业号 将挂起的程序转到后台运行) $ bg %1 此时程序已转到后台运行,但是输出的结果还是会输出到本终端 (可以用jobs查看正在后台的程序) $ jobs [1]+ 运行中 python3 test.py & (用 fg %作业号 将后台运行的程序拉回前台) $ fg %1 输出: python3 test.py 5 6 7
2.用nohup
nohup命令可以在终端关闭时不发送(hang up)信号给子进程,符合我的需求
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13nohup python3 test.py & 如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件: nohup python3 test.py > myout.file 2>&1 在上面的例子中,输出被重定向到myout.file文件中。 拓展: 2>&1的意思是: 将标准错误流(2)重定向输出到标准输出流(1)中, 而> myout.file又将标准输出流输出到了myout.file中 所以2>&1表示把标准错误流和标准输出流都重定向输出到myout.file 拓展: 为什么需要将标准错误流重定向到标准输出流,那是因为标准错误没有缓冲区,而stdout有。 如果写成nohup python3 test.py > myout.file 2>myout.file,会导致 myout.filet被两次打开, 而stdout和stderr将会竞争覆盖.
2.解决python文件中print无法被输出到nohup.out文件中的方法
复制代码
1
2
3
4
5$ nohup python3 test.py & 会自动创建nohup.out文件,但test.py中print的内容却没有被写入nohup.out中(cat 看一下是空的) $ cat nohup.out $
原因:
这是因为python的输出有缓冲,print的内容是先输出到缓冲区,导致nohup.out并不能够马上看到输出
解决:
python有一个 -u 参数可以禁用缓冲区
复制代码
1
2
3
4
5
6
7$ nohup python3 -u test.py & 这时候cat可以看到nohup.out中已经有内容了 $ cat nohup.out 1 2 3
这时候可以关闭终端了, 程序会在后台继续运行
3.使用nohup放在后台运行的程序怎么关闭
使用nohup命令放在后台运行的程序再用jobs已经看不见了,也没有办法控制
可以用 ps -aux | grep test.py
查看对应程序的进程号,然后kill就可以停止这个程序
以上就是对linux后台运行程序的一点小总结,为自己存用, 同时也希望能够对大家有所帮助.
最后
以上就是潇洒冬天最近收集整理的关于linux后台运行python3程序(并解决print无法输出到.out文件的问题)linux后台运行python3程序(并解决print无法输出到.out文件的问题)的全部内容,更多相关linux后台运行python3程序(并解决print无法输出到.out文件内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复