python学习_关闭子进程及子进程输出到文件
1、子进程类主要包含两个函数,一个是启动子进程,一个是关闭子进程
2、class subprocess.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/gedit 1.txt")就会报错
可以输入subprocess.Popen(["/usr/bin/gedit", "1.txt"]) 或者 subprocess.Popen("/usr/bin/gedit 1.txt", shell=True)
Popen.wait() 等待子进程退出
3、启动子进程函数,运行一个子进程,然后等待子进程退出
4、Popen.kill() 杀掉子进程
Popen.returncode子程序的返回值,由poll()或者wait()设置,间接地也由communicate()设置。如果为None,表示子进程还没终止。如果为负数-N的话,表示子进程被N号信号终止。
5、关闭子进程函数,当子进程未退出时,杀掉子进程
1、在程序入口,添加signal.SIGTERM信号,当捕获到信号后,关闭子进程
1、目录结构如下
2、在命令行运行python main.py将在新窗口打开1.txt文件,命令行也处于等待的状态
3、在另一个命令行窗口查找main.py运行的pid,然后调用kill pid杀掉主程序。
可以看到之前启动的子进程也一并关闭了
1、subprocess.Popen在启动子进程时,还有许多参数
stdin stdout和stderr,分别表示子程序的标准输入、标准输出和标准错误。可选的值有PIPE或者一个有效的文件描述符(其实是个正整数)或者一个文件对象,还有None。
这里以stdout举例默认是输出到屏幕,也可以指定到文件
2、修改main.py中,mysubpro.Run的参数为mysubpro.Run("ls")
然后运行,可以看到,在命令行中输出了ls命令的结果
3、修改subproces.Popen函数,增加stdout的输出到文件中
可以看到命令行中没有了ls的结果,在文件中看到了ls的结果