简介
- 官方建议调用cmd命令使用
subprocess.run
-
subprocess.run
在python 3.5 添加,之前的版本请用subprocess.call
- 在Python中,我们通过标准库中的subprocess包来fork一个子进程,并运行一个外部的程序。
使用方法
subprocess.run(args, *, stdin=None, input=None, stdout=None, stderr=None, shell=False, timeout=None, check=False)
运行args描述的命令。等待命令完成,然后返回一个CompletedProcess实例。
完整的函数形式很大程度上与Popen构造函数相同 —— 除timeout、input和check之外,该函数的所有参数都传递给Popen接口。
In [123]: subprocess.run("echo 2", shell=True, stdout=subprocess.PIPE)
Out[123]: CompletedProcess(args='echo 2', returncode=0, stdout=b'2\r\n')
参数
- args
args是所有调用所必需的,应该为一个字符串或一个程序参数序列。通常倾向提供参数序列,因为它允许这个模块来处理任何所需的转义和引用参数(例如,允许文件名中的空格)。如果传递单个字符串,shell必须为True(见下文),否则字符串必须简单地命名要执行的程序而不指定任何参数。
- stdin、stdout和stderr
stdin、stdout和stderr分别指定执行程序的标准输入,标准输出和标准错误文件句柄。
如果指定stderr为subprocess.STDOUT,那标准输出和标准错误都会直接输出到标准输出,而CompletedProcess的stdout和stderr都会为None
- shell
如果shell是True,则将通过shell执行指定的命令。
示例
In [125]: cmd_re = subprocess.run("echo 2", shell=True, stdout=subprocess.PIPE)
In [126]: cmd_re.stdout
Out[126]: b'2\r\n'
In [139]: res = subprocess.run("dira", shell=True, stderr=subprocess.STDOUT)
'dira' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
In [140]: type(res.stderr)
Out[140]: NoneType
In [141]: res = subprocess.run("dira", shell=True)
'dira' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
In [142]: type(res.stderr)
Out[142]: NoneType
In [153]: res = subprocess.run("dira", shell=True, stderr=subprocess.PIPE)
In [154]: print(res.stderr.decode('gbk'))
'dira' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
网友评论