Python使用Subprocess.Popen启动进程
简介:
subprocess.Popen()用于创建一个子进程,并连接到子进程的标准输入/输出/错误管道,来管理进程
Popen原型:
1 |
|
参数 | 含义 |
---|---|
args | 要执行的shell命令,可以是字符串或者列表 |
bufsize | 0 无缓冲 1 行缓冲 其他正值 缓冲区大小 负值 采用默认系统缓冲(一般是全缓冲) |
executable | 一般不用,args字符串或列表第一项表示程序名 |
stdin stdout stderr |
None 没有任何重定向,继承父进程 PIPE 创建管道 文件对象 文件描述符(整数) stderr 还可以设置为 STDOUT |
preexec_fn | 钩子函数, 在fork和exec之间执行。(unix平台下有效) |
close_fds | unix 下执行新进程前是否关闭0/1/2之外的文件 windows下不继承还是继承父进程的文件描述符 |
shell | 如果为True unix下相当于args前面添加了 “/bin/sh“ ”-c” window下,相当于添加”cmd.exe /c” |
cwd | 设置工作目录 |
env | 设置环境变量 |
universal_newlines | 各种换行符统一处理成 ‘\n’ |
startupinfo | 传递给CreateProcess的结构体(windows平台下有效) |
creationflags | 传递CREATE_NEW_CONSOLE创建自己的控制台窗口(windows平台下有效) |
Popen对象方法:
方法 | 说明 |
---|---|
poll() | 检查进程是否终止,如果终止返回 returncode,否则返回 None |
wait(timeout) | 等待子进程终止,超时抛异常 |
communicate(input,timeout) | 和子进程交互,发送和读取数据 |
send_signal(singnal) | 发送信号到子进程 |
terminate() | 停止子进程,也就是发送SIGTERM信号到子进程 |
kill() | 杀死子进程。发送 SIGKILL 信号到子进程 |
使用:
1 |
|
注意:
使用PIPE管道
subp.stdout.read()和subp.stdout.readlines()
如果不加参数限制读取bytes大小可能会堵塞(无法拿到数据,与管道缓存无关)
Python使用Subprocess.Popen启动进程
https://www.inktea.eu.org/2021/15502.html