subprocess模块简介 sbuprocess简介 subprocess模块可以执行系统命令,该模块允许用户创建一个新的进程,该进程会连接到input|output|error管道并获取到返回的状态码。 subprocess包含的子类 本文
subprocess模块简介
sbuprocess简介
subprocess模块可以执行系统命令,该模块允许用户创建一个新的进程,该进程会连接到input|output|error管道并获取到返回的状态码。
subprocess包含的子类
本文版本是以python3.6为准,其它版本请参考官方手册。
subprocess.run
subprocess.run(args, *, stdin=None, input=None, stdout=None, stderr=None, shell=False, cwd=None, timeout=None, check=False, encoding=None, errors=None, env=None)
args:我们要执行的命令。值可以是字符串、列表、元组、如果是字符串,则该命令不可以加命令选项,否则会报错。如果需要加命令选项则必须设置shell=True。
input:这个参数不知道干嘛用的,该参数会被传递给communicate(input, timeout=timeout),然后该函数将input传递给stdin,然后就不知道了。
stdin:标准输入。
stdout:标准输出。
stderr:标准错误。
cwd:执行命令的路径。
timeout:超时时间,单位:秒。
check:如果该值为True且进程返回非0的状态码,将触发CalledProcessError异常,该异常的属性会保存args、process状态码、stuout、stderr。
encoding:指定打开stdin、stdout、stderr的编码方式,如果不指定默认是以二进制的方式打开。
env:设置环境变量,让命令在该环境下运行。
示例:
# 基本的使用import subprocess
ret = subprocess.run(['ls','/home/test'],stdout=subprocess.PIPE,stderr=subprocess.PIPE,encoding='utf-8')
print(ret)
# 打印结果如下
CompletedProcess(args=['ls', '/home/test'], returncode=0, stdout='abc\ntest.txt\n', stderr='')
# 使用字符串的命令就要将shell=True
import subprocess
ret = subprocess.run('ls /home/test',shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE,encoding='utf-8')
print(ret)
# 打印结果如下
CompletedProcess(args='ls /home/test', returncode=0, stdout='abc\ntest.txt\n', stderr='')
# 如我们只想看命令结果
import subprocess
ret = subprocess.run('ls /home/test',shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE,encoding='utf-8')
print(ret.stdout)
# 打印结果如下
abc
test.txt
# 使用切换目录的功能
import subprocess
ret = subprocess.run('ls -l',cwd='/home/test',shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE,
encoding='utf-8',check=True)
print(ret.stdout)
# 打印结果如下
总用量 0
drwxr-xr-x 2 root root 6 4月 18 09:22 abc
-rw-r--r-- 1 root root 0 4月 24 11:02 test.txt
# 捕获异常
import subprocess
try:
ret = subprocess.run('ls /home/tst',shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE,encoding='utf-8',check=True)
except Exception as e:
print(e)
# 打印结果如下
Command 'ls /home/tst' returned non-zero exit status 2.
待续。。。。。。。。。。。。。。。。。。。。。。