python中有一个很好用的方式来开启进程,即subprocess.Popen
正常来说,如果subprocess.Popen
要执行的脚本是一个死循环的脚本,那么我们就需要手动的来关闭这个脚本,而无法等待这个脚本自己结束。
但是这个subprocess.Popen
在关闭脚本进程时有一个坑。
举例说明:
python cmd= “python demo.py”
Popen = subprocess.Popen(logcmd, stdout = subprocess.PIPE, shell=True)用上面的方法来执行python demo.py,它的实际原理是另外开启一个cmd命令来运行python demo.py的命令,即使后面用popen.terminate()也只能关闭cmd的命令,cmd命令被kill掉后,python demo.py的线程由系统来托管,杀死不了python demo.py的进程,从而导致python demo.py不能退出.
正确的开启和关闭方法:
(1)开启方式:
import subprocess,os
import signal
cmd = "python demo.py"
proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, bufsize=-1,preexec_fn=os.setsid)
备注:preexec_fn=os.setsid一定要写上文章来源:https://www.toymoban.com/news/detail-644439.html
(2)关闭方式:文章来源地址https://www.toymoban.com/news/detail-644439.html
proc.terminate()
proc.wait()
os.killpg(proc.pid, signal.SIGTERM)
print("程序已关闭")
到了这里,关于subprocess.Popen执行程序以及关闭进程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!