养生 装修 购物 美食 感冒 便秘 营销 加盟 小吃 火锅 管理 创业 搭配 减肥 培训 旅游

python学习_关闭子进程及子进程输出到文件

时间:2024-10-09 15:20:19

本文讲解在使用killpid命令关闭python脚本时,如何优雅地关闭子进程;以及如何将子进程的输出重定向到文件中

工具/原料

python2.7

centos7

子进程

1、子进程类主要包含两个函数,一个是启动子进程,一个是关闭子进程

2、classsubprocess.Popen(args,bufsize=0,executable=None,stdin=None,stdout=None,stderr=None,preexec_fn=None,close_fds=False,shell=False,cwd=None,env=None,universal_newlines=False,startupinfo=None,creationflags=0)启动一个子进程,主要用到的参数就是args下面主要讲解下参数args,可以是一个字符串,也可以是一个包含程序参数的列表比如需要打开gedit程序,可以输入subprocess.Popen("/usr/bin/gedit")如果需要用gedit打开1.txt文本,如果subprocess.Popen("/usr/bin/gedit1.txt")就会报错可以输入subprocess.Popen(["/usr/bin/gedit","1.txt"])或者subprocess.Popen("/usr/bin/gedit1.txt",shell=True)Popen.wait()等待子进程退出

3、启动子进程函数,运行一个子进程,然后等待子进程退出

python学习_关闭子进程及子进程输出到文件

4、Popen.kill()杀掉子进程Popen.returncode子程序的返回值,由poll()或者wait()设置,间接地也由communicate()设置。如果为None,表示子进程还没终止。如果为负数-N的话,表示子进程被N号信号终止。

5、关闭子进程函数,当子进程未退出时,杀掉子进程

python学习_关闭子进程及子进程输出到文件

信号处理

1、在程序入口,添加signal.SIGTERM信号,当捕获到信号后,关闭子进程

python学习_关闭子进程及子进程输出到文件

运行效果

1、目录结构如下

python学习_关闭子进程及子进程输出到文件

2、在命令行运行pythonmain.py将在新窗口打开1.txt文件,命令行也处于等待的状态

python学习_关闭子进程及子进程输出到文件

3、在另一个命令行窗口查找main.py运行的pid,然后调用killpid杀掉主程序。可以看到之前启动的子进程也一并关闭了

python学习_关闭子进程及子进程输出到文件

子进程输出到文件

1、subprocess.Popen在启动子进程时,还有许多参数stdinstdout和stderr,分别表示子程序的标准输入、标准输出和标准错误。可选的值有PIPE或者一个有效的文件描述符(其实是个正整数)或者一个文件对象,还有None。这里以stdout举例默认是输出到屏幕,也可以指定到文件

2、修改main.py中,mysubpro.Run的参数为mysubpro.Run("ls")然后运行,可以看到,在命令行中输出了ls命令的结果

python学习_关闭子进程及子进程输出到文件

python学习_关闭子进程及子进程输出到文件

3、修改subproces.Popen函数,增加stdout的输出到文件中可以看到命令行中没有了ls的结果,在文件中看到了ls的结果

python学习_关闭子进程及子进程输出到文件

python学习_关闭子进程及子进程输出到文件

© 一点知识