[Python3]subprocess模块

subprocess模块

官方推出subprocess模块是为了提供统一的模块来实现对系统命令或脚本的调用。
三种执行命令的方法
subprocess.run()
subprocess.call()
subprocess.Popen()

run()方法
subprocess.run(['df', '-h'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, check=True)
stdout标准输出,stdin标准输入,stderr标准错误
subprocess.PIPE是把结果存到管道里进行缓存

call()方法
a = subprocess.call(['df', '-h'])
执行命令,返回命令执行状态,0 或 非0

subprocess.check_call(['ls', '-l'])
如果命令结果为0,就正常返回,否则抛出异常

subprocess.getstatusoutput('ls /bin/ls')
接收字符串格式命令,返回元组形式,第一个元素为执行状态,第二个元素为命令结果(0,'/bin/ls')

subprocess.getoutput('ls /bin/ls')
接收字符串格式命令,返回结果

a = subprocess.check_output(['ls', '-l'])
执行命令并返回结果,需要有接收返回值的变量

Popen()方法
常用参数:

args:shell命令,可以是字符串或者序列类型(如:list,元组)
stdin, stdout, stderr:分别表示程序的标准输入、输出、错误句柄
preexec_fn:只在Unix平台下有效,用于指定一个可执行对象(callable object),它将在子进程运行之前被调用
shell:同上
cwd:用于设置子进程的当前目录
env:用于指定子进程的环境变量。如果env = None,子进程的环境变量将从父进程中继承。

a = subprocess.run('sleep 10', shell=True, stdout=subprocess.PIPE)
a = subprocess.Popen('sleep 10', shell=True, stdout=subprocess.PIPE)
run方法   在主程序执行
Popen方法 发起一个新的子进程,不影响主程序

pid     获取所启动的进程的进程号
poll()  检测子进程是否终止,返回返回代码
wait()  等待发起的进程结束
terminate()   终止所启动的进程  
kill()        杀死所启动的进程
communicate()       和启动的进程交互,通过stdin发送数据,通过stdout接收输出数据    只能交互一次

猜你喜欢

转载自blog.csdn.net/TynMhxx/article/details/81610361