天天看点

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.      

待续。。。。。。。。。。。。。。。。。。。。。。