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.
待续。。。。。。。。。。。。。。。。。。。。。。