python模块-subprocess

概述

subprocess 允许你启动一个新的进程,连接到这个进程的输入,输出,错误的管道中,取得返回的值。用于执行一些系统的命令

代码结构及其实例

run

官方推荐其使用 run 方法。这是一个封装好的subprocess方法, 返回一个CompleteProcess 实例

1
subprocess.run(args, *, stdin=None, input=None, stdout=None, stderr=None, shell=False, cwd=None, timeout=None, check=False, encoding=None, errors=None)

代码1:

1
2
3
4
5
import subprocess
# 运行后不会有输出
a = subprocess.run('ls -al',shell=True,stdout=subprocess.PIPE)
# 输出
a.stdout

代码2:

1
2
3
4
5
6
7
8
import subprocess
b = subprocess.run(['ls','-al'],stdout=subprocess.PIPE)
b.stdout
CompleteProcess对象有以下参数:
args: 用于执行的命令,比如 ls -al, ['ls','-al']
returnCode: 退出进程后,返回值
stdout: 命令输出
stderr: 命令错误时输出

subprocess构造函数

1
class subprocess.Popen(args, bufsize=-1, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=True, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0, restore_signals=True, start_new_session=False, pass_fds=(), *, encoding=None, errors=None)

常见代码1:

1
2
3
4
5
test = subprocess.Popen(['ls','-al'],stdout=subprocess.PIPE)
# test.stdout 返回一个<_io.BufferedReader name=3>
test.stdiyt.read() # 读取输出

注: 必须要有 stdout=subprocess.PIPE 否则不会有输出。

与命令交互:

1
Popen.communicate(input=None,timeout=None) # (stdout_data,stderr_data)