使用 subprocess.Popen 模块
- Popen 构建方法
subprocess.Popen(commands,
bufsize=0,
stdin=None, stdout=None,stderr=None,
shell=False,
cwd=None, env=None
universal_newlines=False)
- 参数说明
commands | 命令字符串或字符串列表 | |
---|---|---|
bufsize |
| |
stdin stdout stderr | 子进程标准输入、标准输出、标准错误输出;默认 None 即继承父进程; 可选值包括:subprocess.PIPE(使用新管道),文件对象; stderr 还有 subprocess.STDOUT(标准错误流输出到标准输出中) | |
shell |
| |
cwd | 设置工作目录 | |
env |
| |
universal_newlines | 当设置为 True 时,各种换行符都统一处理成 "\n" |
- Popen 使用示例
import subprocess
# 子进程的标准输出默认为当前控制台
p = subprocess.Popen("ls", shell=True)
p.wait() # 阻塞当前线程直到子进程 p 执行结束
# 子进程的标准输出设置为管道对象
p = subprocess.Popen("ls", shell=True, stdout=subprocess.PIPE, universal_newlines=True)
p.wait()
result_lines = p.stdout.readlines() # 从子进程 p 的标准输出中读取所有行,并储存在一个list对象中
for line in result_lines:
print(line.strip())
- Popen 内置方法
popen.poll() | 检查子进程是否已经结束,返回 returncode 属性; |
popen.wait() | 阻塞当前线程直到子进程执行结束,返回 returncode 属性; |
popen.send_signal(signal) | 向子进程发送 signal 信号; |
popen.terminate() | 停止子线程; POSIX下发送 SIGTERM 信号,window 下调用 TerminateProcess() API |
popen.kill() | 杀死子线程; POSIX下发送 SIGKILL 信号,window 下调用 TerminateProcess() API |
popen.stdin | 如果stdin 参数是PIPE,此属性就是一个文件对象,否则为None ; |
popen.stdout | 如果stdout参数是PIPE,此属性就是一个文件对象,否则为None ; |
popen.stderr | 如果stderr 参数是PIPE,此属性就是一个文件对象,否则为None ; |
popen.pid | 子进程的进程号; 如果shell 参数为True,这属性指的是子shell的进程号。 |
popen.returncode | 子程序的返回值 |