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模块相关推荐

  1. python subprocess 模块

    subprocess 模块中有一个功能Popen , 可以在代码中调用系统的命令 其功能比os.system 更加强大 代码示例: command = 'python -u %s/generalMak ...

  2. python subprocess模块 命令执行

    subprocess模块中定义了一个Popen类,通过它可以来创建进程,并与其进行复杂的交互.查看一下它的构造函数: __init__(self, args, bufsize=0, executabl ...

  3. python subprocess模块_python subprocess模块详解

    一.subprocess标准库 python执行shell脚本,通常会使用so模块中的几个方法,如system.spawn*.popen等.subprocess标准库的引入就是为了取代这些老的模块方法 ...

  4. Python常用模块之subprocess模块

    当我们需要调用系统的命令的时候,最先考虑的os模块.用os.system()和os.popen()来进行操作. 但是这两个命令过于简单,不能完成一些复杂的操作,如给运行的命令提供输入或者读取命令的输出 ...

  5. python子进程模块subprocess

    2019独角兽企业重金招聘Python工程师标准>>> python子进程模块subprocess 目录 一.subprocess 模块简介 1.1. 使用 subprocess模块 ...

  6. Python之路(第二十篇) subprocess模块

    一.subprocess模块 subprocess英文意思:子进程 那什么是进程呢? (一)关于进程的相关理论基础知识 进程是对正在运行程序的一个抽象,进程的概念起源于操作系统,是操作系统最核心的概念 ...

  7. python的subprocess模块执行shell命令

    subprocess模块可以允许我们执行shell命令 一般来说,使用run()方法就可以满足大部分情况 使用run执行shell命令 In [5]: subprocess.run('echo &qu ...

  8. python commands模块在python3.x被subprocess取代

    subprocess 可以执行shell命令的相关模块和函数有: os.system os.spawn os.popen --废弃 popen2.* --废弃 commands.* --废弃,3.x中 ...

  9. python subprocess communicate_Python中的Subprocess模块

    以前我一直用os.system()处理一些系统管理任务,因为我认为那是运行linux命令最简单的方式. 我们能从Python官方文档里读到应该用subprocess 模块来运行系统命令.subproc ...

最新文章

  1. phoenix hbase Can't get master address from ZooKeeper; znode data == null
  2. 利用windows的rar工具创建自解压安装文件的方法
  3. BZOJ 2668: [cqoi2012]交换棋子
  4. java运行环境变量及自定义变量
  5. qos和被qos是什么意思
  6. 晚上:上课笔记,听完自己独立完成
  7. 原生js替换jQuery各种方法-中文版
  8. html 图片使用scale,CSS scale()用法及代码示例
  9. java不规则数组杨辉,JAVASE课程 第一章 第三讲程序控制与数组
  10. 查看MD04结果的程序 Production Planning - Extract data from MRP Table
  11. 关于PopWindow的一些介绍
  12. 解析MATLAB短时傅里叶变换函数spectrogram()
  13. 整数进制转换——输入十进制整数和欲转换的进制数r,将十进制数转换为r进制数的Python程序
  14. java中随机产生一个数_在Java中产生随机数的两个方法
  15. buff系统 游戏中_arpg游戏的技能系统和buff系统的一种实现
  16. ANSYS 有限元分析 后处理 General Postproc
  17. SpringBoot banner更改
  18. 廖雪峰python教程杨辉三角_廖雪峰--python教程:笔记三
  19. Linux将与Windows争夺主流地位
  20. AIoT应用创新大赛-基于TencentOS Tiny 的遥控小车

热门文章

  1. 中运量71路线路图_浦东临港的中运量呼之欲出:临港地区已经成为上海建设的热土...
  2. mysql基于时间盲注_MYSQL基于时间的盲注详解
  3. 网络品牌推广之标签的使用注意事项
  4. 网络营销——网络营销专员浅析不同企业之间的营销推广各有差异
  5. 当百度更新算法时,网站优化应注意哪些事项?
  6. 什么样的域名利于网站SEO优化?
  7. 网站转化率做不好多半是这三大因素产生干扰
  8. 安卓ttf格式的字体包_苹果官网御用字体
  9. 开发日记-20190417 关键词 代码之间耦合度的一刀两断 (思路篇)
  10. Karma和Jasmine自动化单元测试——本质上还是在要开一个浏览器来做测试