Python subprocess模块
subprocess |
subprocess模块介绍
subprocess模块是一个可以将系统内的命令结果赋值给变量并打印, 还可以输出命令执行状态,subprocess可以单独将
命令输出结果与执行状态,以及报错信息等。
模块使用
>>subprocess.run("df -h |grep sda1",shell=True)
注:输出命令内容,可用单个字符串,涉及到管道符可使用shell=True。
注:shell=True表示不需要python解析命令,让linux自己去解析。
屏幕输出类别
stdout(标准输出)
stdin(标准输入)
stdeerr(把错误单独分开)
注:如果需要存如错误打印,可以使用“stder=subprocess.PIPE”
常用subprocess方法
#执行命令,返回命令执行状态,0 or 非0
>>>retcode = subprocess.call("ls","-l")
0
#执行命令,如果命令结果为0,就正常返回,否则抛异常。
>>>subprocess.check_call(["ls","-l"])
0
#接受字符串格式命令,返回元组形式,第一个元素执行状态,第二个是命令结果。
>>>subprocess.getstatusoutput('ls /bin/ls')
(0,'/bin/ls')
#接收字符串格式命令,并返回结果
>>>subprocess.getoutput('ls /bin/ls')
'/bin/ls'
#执行命令,并返回结果,注意是返回结果,不是打印,下列结果返回给res。
>>>res=subprocess.check_output(['ls','-l'])
>>>res
b'total D\ndrwxr -xr-x 12 alex staff 408 Nov 2 11:05 OldBoyCRM\n'
#通过Popen打印结果的步骤,打印内存地址输出,需要通过stdout输出到标准输出内。
>>>res = subprocess.Popen("ifconfig|grep 192",shell=True,stdout=subprocess.PIPE)
>>>res.stdout.read()
注:stdout:标准输出。
stdout=subprocess.PIPE:先输出到标准输出内。
原理图(列1)
#上面哪些方法,底层都是封装的subprocess.Popen
poll()
Check if child process has terminated. Returns returncode
注:可以与执行结果长的结合使用。
res.poll():返回None,没执行完。
res.poll():返回0,执行完了。
wait()
Wait for child process to terminate. Returns returncode attribute
注:wait()执行后等待执行结果后才可继续操作终端。
terminate()
注:杀掉所启动进程。
使用:res.terminate() 创建变量后在杀掉进程。
communicate()
注:等待任务结束,可在命令等待过程中输入内容。
命令式列
import subprocess obj = subprocess.Popen(["python"],stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE) obj.stdin.write('print 1 \n') obj.stdin.write('print 2 \n') obj.stdin.write('print 3 \n') obj.stdin.write('print 4 \n')out_error_list = obj.communicate(timeout=10) print(out_error_list)
可用参数:
- args:shell命令,可以是字符串或者序列类型(如:list,元组)
- bufsize:指定缓冲。0 无缓冲,1 行缓冲,其他 缓冲区大小,负值 系统缓冲
- stdin, stdout, stderr:分别表示程序的标准输入、输出、错误句柄
- preexec_fn:只在Unix平台下有效,用于指定一个可执行对象(callable object),它将在子进程运行之前被调用
- close_sfs:在windows平台下,如果close_fds被设置为True,则新创建的子进程将不会继承父进程的输入、输出、错误管道。
所以不能将close_fds设置为True同时重定向子进程的标准输入、输出与错误(stdin, stdout, stderr)。
- shell:同上
- cwd:用于设置子进程的当前目录
- env:用于指定子进程的环境变量。如果env = None,子进程的环境变量将从父进程中继承。
- universal_newlines:不同系统的换行符不同,True -> 同意使用 \n
- startupinfo与createionflags只在windows下有效
将被传递给底层的CreateProcess()函数,用于设置子进程的一些属性,如:主窗口的外观,进程的优先级等等
模块使用案例
subprocess实现sudo 自动输入密码
import subprocessdef mypass():mypass = '123' #or get the password from anywherereturn mypassecho = subprocess.Popen(['echo',mypass()],stdout=subprocess.PIPE,)sudo = subprocess.Popen(['sudo','-S','iptables','-L'],stdin=echo.stdout,stdout=subprocess.PIPE,)end_of_pipe = sudo.stdoutprint "Password ok \n Iptables Chains %s" % end_of_pipe.read()
转载于:https://www.cnblogs.com/xiangsikai/p/7798681.html
Python subprocess模块相关推荐
- python subprocess 模块
subprocess 模块中有一个功能Popen , 可以在代码中调用系统的命令 其功能比os.system 更加强大 代码示例: command = 'python -u %s/generalMak ...
- python subprocess模块 命令执行
subprocess模块中定义了一个Popen类,通过它可以来创建进程,并与其进行复杂的交互.查看一下它的构造函数: __init__(self, args, bufsize=0, executabl ...
- python subprocess模块_python subprocess模块详解
一.subprocess标准库 python执行shell脚本,通常会使用so模块中的几个方法,如system.spawn*.popen等.subprocess标准库的引入就是为了取代这些老的模块方法 ...
- Python常用模块之subprocess模块
当我们需要调用系统的命令的时候,最先考虑的os模块.用os.system()和os.popen()来进行操作. 但是这两个命令过于简单,不能完成一些复杂的操作,如给运行的命令提供输入或者读取命令的输出 ...
- python子进程模块subprocess
2019独角兽企业重金招聘Python工程师标准>>> python子进程模块subprocess 目录 一.subprocess 模块简介 1.1. 使用 subprocess模块 ...
- Python之路(第二十篇) subprocess模块
一.subprocess模块 subprocess英文意思:子进程 那什么是进程呢? (一)关于进程的相关理论基础知识 进程是对正在运行程序的一个抽象,进程的概念起源于操作系统,是操作系统最核心的概念 ...
- python的subprocess模块执行shell命令
subprocess模块可以允许我们执行shell命令 一般来说,使用run()方法就可以满足大部分情况 使用run执行shell命令 In [5]: subprocess.run('echo &qu ...
- python commands模块在python3.x被subprocess取代
subprocess 可以执行shell命令的相关模块和函数有: os.system os.spawn os.popen --废弃 popen2.* --废弃 commands.* --废弃,3.x中 ...
- python subprocess communicate_Python中的Subprocess模块
以前我一直用os.system()处理一些系统管理任务,因为我认为那是运行linux命令最简单的方式. 我们能从Python官方文档里读到应该用subprocess 模块来运行系统命令.subproc ...
最新文章
- phoenix hbase Can't get master address from ZooKeeper; znode data == null
- 利用windows的rar工具创建自解压安装文件的方法
- BZOJ 2668: [cqoi2012]交换棋子
- java运行环境变量及自定义变量
- qos和被qos是什么意思
- 晚上:上课笔记,听完自己独立完成
- 原生js替换jQuery各种方法-中文版
- html 图片使用scale,CSS scale()用法及代码示例
- java不规则数组杨辉,JAVASE课程 第一章 第三讲程序控制与数组
- 查看MD04结果的程序 Production Planning - Extract data from MRP Table
- 关于PopWindow的一些介绍
- 解析MATLAB短时傅里叶变换函数spectrogram()
- 整数进制转换——输入十进制整数和欲转换的进制数r,将十进制数转换为r进制数的Python程序
- java中随机产生一个数_在Java中产生随机数的两个方法
- buff系统 游戏中_arpg游戏的技能系统和buff系统的一种实现
- ANSYS 有限元分析 后处理 General Postproc
- SpringBoot banner更改
- 廖雪峰python教程杨辉三角_廖雪峰--python教程:笔记三
- Linux将与Windows争夺主流地位
- AIoT应用创新大赛-基于TencentOS Tiny 的遥控小车
热门文章
- 中运量71路线路图_浦东临港的中运量呼之欲出:临港地区已经成为上海建设的热土...
- mysql基于时间盲注_MYSQL基于时间的盲注详解
- 网络品牌推广之标签的使用注意事项
- 网络营销——网络营销专员浅析不同企业之间的营销推广各有差异
- 当百度更新算法时,网站优化应注意哪些事项?
- 什么样的域名利于网站SEO优化?
- 网站转化率做不好多半是这三大因素产生干扰
- 安卓ttf格式的字体包_苹果官网御用字体
- 开发日记-20190417 关键词 代码之间耦合度的一刀两断 (思路篇)
- Karma和Jasmine自动化单元测试——本质上还是在要开一个浏览器来做测试