python模块之——subprocess
2020-04-22 12:33
471 查看
前言:os.system也可以执行系统命令,但是它会直接在主进程中去执行命令,如果该命令执行需要耗费很长时间,那么主进程就会一直卡着,导致效率低下。而subprocess模块在执行命令时,会开辟出一个一个子进程去执行命令,由于进程之间的内存空间是独立的,所以在subprocess模块中有个管道的概念,可以将执行命令的结果输出到管道,该管道就相当于一块共享的内存空=空间,可以让主进程去获取该共享空间存放的数据。
import subprocess # 创建一个子进程去执行系统命令 obj=subprocess.Popen( 'ps -ef', # 执行的系统命令(必须是字符串格式) shell=True, # 指定命令解释器来解释执行的这条命令 stdout=subprocess.PIPE, # 将执行的正确结果丢到管道(共享内存空间,用于进程之间共享) stderr=subprocess.PIPE # 将执行的错误结果丢到另一个新的管道 ) ''' 当从任意一个管道,例如正确或者错误结果管道中获取值, ''' # 从正确管道中获取值 res=obj.stdout.read() # 主进程去管道里获取正确的结果 print(res.decode('utf-8')) # 获取的结果是bytes类型,需要指定decode指定编码 # 从错误管道中获取值 res2=obj.stderr.read() print(res2.decode('utf-8'))
替换之前的旧模块
-
os.system(cmd)
执行系统命令,返回命令执行的退出状态码,0或非0 -
os.popen(cmd)
返回脚本执行后的输出内容
基本用法
- subprocess.run(args,。。。)
args默认为一个字符串序列,如[‘df’,‘-h’],也可以使用’df -h’,但此时需要指定shell=True。
注意:shell=True参数会让subprocess.call接受字符串类型的变量作为命令, 并调用shell去执行这个字符串, 当shell=False时, subprocess.call只接受数组变量作为命令, 并将数组的第一个元素作为命令, 剩下的全部作为该命令的参数。官方不推荐使用shell=True。 - subprocess.call()
返回命令的执行结果,0或非0 - subprocess.getstatusoutput()
接收字符串形式的命令,返回一个元祖形式的结果,第一个元素为命令执行状态,第二个元素为执行结果 - subprocess.getoutput()
接收字符串形式的命令,返回执行结果 - subprocess.popen()
上述所示命令均为该命令的封装
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- Python模块学习 ---- subprocess 创建子进程
- python 关于操作文件的相关模块(os,sys,shutil,subprocess,configparser)
- Python模块——subprocess
- Python configparser模块 与 subprocess 模块
- python模块:调用系统命令模块subprocess等
- Python基础篇【第6篇】: Python模块subprocess
- Python模块学习 ---- subprocess 创建子进程
- python模块_subprocess
- python模块之 - subprocess执行unix/linux命令
- Python模块学习——subprocess
- python模块系列之 - subprocess
- Python sh模块--------替换subprocess的利器
- Python模块学习 ---- subprocess 创建子进程
- [转载]Python模块学习 ---- subprocess 创建子进程
- python模块--subprocess
- Python模块 - subprocess
- Python 第五篇(下):系统标准模块(shutil、logging、shelve、configparser、subprocess、xml、yaml、自定义模块)
- 转:Python模块学习 ---- subprocess 创建子进程
- python常用模块-subprocess
- 树莓派 - 2 Python - b 网络与进程/线程模块:socket, threading, subprocess