subprocess
该子模块允许你创建新的流程,连接到它们的输入/输出/错误管道,并获取他们的返回值。该模块打算替换多个旧的模块和功能:os.system 和 os.spawn *
使用subprocess时建议使用run()函数去处理所有它可以处理的情况,因为高级用法可以直接使用底层POPEN接口。
run()函数是Python 3.5中新添加的。
使用方法:
subprocess.
run
(args, *, stdin=None, input=None, stdout=None, stderr=None, shell=False, timeout=None, check=False)args 该参数用于启动进程。这可能是一个列表或一个字符串。
returncode 该参数表示子进程的退出状态。
通常情况下,0作为退出状态表明它成功运行。
负值-N表明子进程被信号N终止(仅POSIX)。
stdout 该参数表示标准输出
从子过程中捕获标准输出。一个字节序列,或字符串 ()如果运行一个字符串被称为与universal_newlines = TRUE。无如果stdout没有抓获。
如果您运行进程与标准错误= subprocess.STDOUT,输出和错误将在此属性相结合,和stderr将是无。
标准错误
从子过程中捕获标准错误。一个字节序列,或()如果运行一个字符串被称为与universal_newlines = TRUE。无标准错误,如果没有抓获。
check_returncode()
如果返回码不为零,养CalledProcessError。
先看个例子:
>>> import subprocess
>>> subprocess.run(["ls"])
run_server.py # ls命令返回的结果
CompletedProcess(args=[‘ls‘], returncode=0) # run函数返回的结果
>>> subprocess.run(["ls", "-l"]) # 这个和上面的类似
总用量 4
-rw-r--r-- 1 root root 266 9月 22 14:35 run_server.py
CompletedProcess(args=[‘ls‘, ‘-l‘], returncode=0)
>>> subprocess.run(["ls"],stdout=subprocess.PIPE) # 加上stdout参数之后,系统命令返回的结果就不会输出了
CompletedProcess(args=[‘ls‘], returncode=0, stdout=b‘run_server.py\n‘)
>>> a = subprocess.run(["ls"],stdout=subprocess.PIPE)
>>> print(a)
CompletedProcess(args=[‘ls‘], returncode=0, stdout=b‘run_server.py\n‘)
>>> print(a.stdout,a.args,a.returncode) # 可以对返回值进行操作
b‘run_server.py\n‘ [‘ls‘] 0