在使用python进行程序开发的时候,需要将写好的python程序丢到后台执行,然后我们在晚上回去休息,第二天再过来看结果即可。但是在linux上有哪些方法可以把python程序丢到后台执行呢?我们一起来看看。
工具/原料
linux服务器
一、 linux命令方式
1、首先我们来写一小段小脚本,内容如下所示:#!/usr/bin/env pythonimport timewith open('./test.log', 'w+'像粜杵泳) as tf: i = 0 while True: i = i + 1 time.sleep(1) print(i, file=tf, flush=True)这段脚本的内容就是,每个1s输出一个值到test.log这个文件中去。如果这个程序在后台被终结,那么test.log这个日志文件中就看不到对应的值了。
2、首先我们来看第一种方式,使用linux的后台命令&,执行方式如下所示:python test.py &执行结果如下所示,可以看到它生成了一个后台pid值,如下面图中所示,然后我们用ps命令查看一下,可以看到后台确实有这个进程。
3、然后我们来看一下日志输出文件,命令是:ls test.*可以看到目录下面确实生成了test.log这个日志文件,再用tail -f命令看一下日志输出,可以看到值确实一直在增加。如下面图中所示:
4、下面我们再来看第二种方式,使用nohup命令来执行。使用nohup执行之前,现有kill命令将后台的test.py命令终结。命令格式是:kill -9 pid执行结果如下面第一张图中所示,然后使用nohup命令启动test.py程序,命令格式是:nohup python test.py &执行结果如下所示,同样的,也是生成一个后台进程,通过进程编号可以看到对应的进程,然后通过tail -f命令也可以看到test.log里的数值是在递增的,说明程序在后台运行正常。
二、python模块daemon
1、上面两种方式都是通过linux系统自带的命令来执行的,但是我们还可以通过python自己的模块来执行,这个模块就是daemon,首先我们来安装这个模块,命令是pip install daemon这个模块比较小,安装的也比较快。如下所示:
2、安装完成后,我们需要訇咀喃谆将我们的测试脚本稍微修改一下,修改后的内容如下:#!/usr/bin/env pythonimport timefrom daemon import Da髫潋啜缅emonContextwith open('./test.log', 'w+') as tf: def test(): i = 0 while True: i = i + 1 time.sleep(1) print(i, file=tf, flush=True) with DaemonContext(files_preserve=[tf]): test()将原来的测试功能改成一个叫做test的函数,然后在daemon的模块里调用这个函数,这里如果要想将测试日志写入文件的把,必须先打开文件句柄,然后把文件句柄通过files_preserve参数传递给DaemonContext,否则,不会把结果输出到任何文件。
3、这个时候就简单了,直接执行命令python test.py然后就自动把test.py这个程序丢到后台去执行了,如下所示,然后使用tail -f命令查看,可以看到数据在递增。说明这个方法也是有效的。