模块讲解----subprocess模块
历史
#输出结果到屏幕上,并不返回执行状态
os.system('dir')
#保存命令的执行结果输出
ret = os.popen('dir').read()
问题:上面2条是把命令结果保存下来了,但是返回状态没了,也就没办法判断该命令是否执行成功。例如:
解决方式: 既想要执行结果邮箱要执行状态请使用subprocess模块。
注意:
在python2.7里有个commands模块,可以通过commands.getstatusoutput("dir")查看系统命令的执行状态,但是在3.5里就已经弃用了。
在3.5里新出了一个subprocess模块来替换os.system、os.spawn*、 commands等模块的功能。
subprocess模块:
作用:
#python解析shell命令:
subprocess.run(["df","-h"]) #不用python解析shell命令:(shell=True)
subprocess.run("df -h |grep sda1",shell=True)
一、执行命令,返回状态值,不返回结果:(call)
1、列表形式(shell = False)
ret = subprocess.call(["ls","-l"],shell=False)
print(ret) 2、字符串形式(shell=True)
ret = subprocess.call("ls -l",shell=True)
print(ret)
二、执行命令,如果状态码是0,则返回0,否则报异常,不反悔结果:(check_call)
1、列表形式(shell = False)
ret = subprocess.check_call(["ls","-l"],shell=False)
print(ret) 2、字符串形式(shell=True)
ret = subprocess.check_call("ls -l",shell=True)
print(ret)
三、执行命令,如果状态码是 0 ,则返回执行结果,否则抛异常:(check_output)
1、列表形式(shell = False)
ret = subprocess.check_output(["echo","hello world"],shell=False)
print(ret) 2、字符串形式(shell=True)
ret = subprocess.check_output("exit 1",shell=True)
print(ret)
四、本地创建目录:
使用subprocess.Popen(...) 用于执行复杂的系统命令(上面的方法在后台实际就是调用的Popen)
(二)、输入即可得到输出,如:ifconfig
import subprocess
ret1 = subprocess.Popen(["mkdir","t1"])
ret2 = subprocess.Popen("mkdir t2", shell=True)
五、跳转到指定目录然后在创建目录:
输入进行某环境,依赖再输入,如:python
obj = subprocess.Popen("mkdir t3", shell=True, cwd='/home/dev',)
六、通过管道进入交互方式:
import subprocess #下面的stdin,stdout,stderr相当于三个管道,以后要想写内容的时候通过管道就可以写。
obj = subprocess.Popen(["python"], #写了一个python,就会进入python解释器,obj就相当于定义一个对象。
stdin=subprocess.PIPE, #专门写的管道1
stdout=subprocess.PIPE, #那正常结果的管道2
stderr=subprocess.PIPE, #用来拿错误的管道3
universal_newlines=True) #向管道里面写数据,下面2个print就相当于写了2行数据。(相当于在终端把命令输入进去了,剩下的就是拿结果)
obj.stdin.write("print(1)\n")
obj.stdin.write("print(2)")
obj.stdin.close() #表示停止写入 #可以到stdout的管道中取结果,读到正常输出的结果值
cmd_out = obj.stdout.read()
obj.stdout.close() #如果出现错误,可以到stderr中提取报错结果
cmd_error = obj.stderr.read()
obj.stderr.close() #最后输出执行命令结果
print(cmd_out)
print(cmd_error)
七、合并stdout和stderr的输入结果值:(communicate):
import subprocess obj = subprocess.Popen(["python"],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
universal_newlines=True)
obj.stdin.write("print(1)\n")
obj.stdin.write("print(2)") out_error_list = obj.communicate() #其实这个命令就是去stdout和stderr两个管道里去拿返回out和error值,不用再次编辑。
print(out_error_list)
八、执行简单的命令:
import subprocess
obj = subprocess.Popen(["python"],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
universal_newlines=True)
out_error_list = obj.communicate('print("hello")')
print(out_error_list)
模块讲解----subprocess模块的更多相关文章
- python重要模块之subprocess模块
python重要模块之subprocess模块 我们经常要通过python去执行系统的命令或者脚本,系统的shell命令是独立于你的python进程之外的,每执行一条命令,就相当于发起了一个新的进程, ...
- configparser模块,subprocess 模块,xlrd,xlwt ,xml 模块,面向对象
1. configparser模块 2.subprocess 模块 3.xlrd,xlwt 4.xml 模块 5.面向对象 面向对象是什么? 是一种编程思想,指导你如何更好的编写代码 关注点在对象 具 ...
- [xml模块、hashlib模块、subprocess模块、os与sys模块、configparser模块]
[xml模块.hashlib模块.subprocess模块.os与sys模块.configparser模块] xml模块 XML:全称 可扩展标记语言,为了能够在不同的平台间继续数据的交换,使交换的数 ...
- logging模块、shutil模块、subprocess模块、xml模块
logging模块 shutil模块 subprocess模块 xml模块 logging模块 函数式简单配置 import logging logging.debug('debug message' ...
- python-re模块和subprocess模块
一.re模块 re中文为正则表达式,是字符串处理的常用工具,通常用来检索和替换符合某个模式的文本. 注:要搜索的模式和字符串都可以是unicode字符串(str)和8位字符串(bytes),但是不能将 ...
- os模块、os.path模块、shutil模块、configparser模块、subprocess模块
一.os模块 os指的是操作系统 该模块主要用于处理与操作系统相关的操作,常用的是文件操作(读.写.删.复制.重命名). os.getcwd() 获取当前文件所在的文件夹路径 os.chdir() ...
- re模块与subprocess模块介绍
一:re模块 处理正则表达式的模块,正则表达式就是一些带有特殊含义的符号或者符号的组合. 作用:对字符串进行过滤,在一堆字符串中找到你所关心的内容,你就需要告诉计算机你的过滤的 规则是什么 ...
- Python开发基础-Day15正则表达式爬虫应用,configparser模块和subprocess模块
正则表达式爬虫应用(校花网) import requests import re import json #定义函数返回网页的字符串信息 def getPage_str(url): page_stri ...
- python16_day06【类、RE模块、subprocess模块、xml模块、shelve模块】
一.shelve模块 import shelve # 基于pickle模块, d = shelve.open('shelve_test') class Test(object): def __init ...
随机推荐
- 利用GetType反射方法再调用方法进行传递参数实现调用
直接上代码: TestMenuService.MenuServiceCSClient tesClient = new TestMenuService.MenuServiceCSClient(); va ...
- css文字超出自动显示省略号
只针对单行文本有效: 01.针对块状元素 ul li{ width: 180px; text-overflow: ellipsis; white-space: nowrap;/*禁止自动换行*/ ov ...
- hdu 5038 水题 可是题意坑
http://acm.hdu.edu.cn/showproblem.php?pid=5038 就是求个众数 这个范围小 所以一个数组存是否存在的状态即可了 可是这句话真恶心 If not all ...
- python2.0_day16_django_url_view_models_template介绍
本节内容 Django流程介绍 Django url Django view Django models Django template Django form Django admin Django ...
- PHP防止跨站表单提交与同站跨页伪造表单的攻击
在以前的防止跨站攻击的时候,使用了验证提交的页面是否是同一个站点,这样可以防止普通的攻击,ereg("blog.qita.in",$_SERVER['HTTP_REFERER']) ...
- OpenGL超级宝典总结(二)2D/3D笛卡尔坐标、坐标裁剪、纹理坐标、MVP转换等概念
如果你想把图形渲染在正确的位置上,那么坐标的设置就很重要了.在OpenGL中,与坐标相关的主要有笛卡尔坐标.坐标裁剪.纹理坐标.MVP(Model View Projection)转换. 1.笛卡尔坐 ...
- 谈谈java中的构造函数
from 本篇博文主要是为新手.对java语言感兴趣的人和那些没有系统学习过java基础知识的人进行一个总结,在文章中对构造函数进行了较为详细的说明和讨论,也包含了我个人对于java面向对象中构造函数 ...
- axios请求本地json
在vux的项目中 1,首先,json文件的位置: 原因: 访问服务器文件,应该把 json文件放在最外层的static文件夹,这个文件夹是vue-cli内置服务器向外暴露的静态文件夹 2,一定要用 ...
- Java初学者笔记二:关于类的常见知识点汇总
一.Java的类: Java的类是Java的基本概念了,基本的定义语法我就不提了,自己也不会忘了的,下面分成几个模块介绍: 1.Java的类定义时候的修饰符 2.Java的类的继承与派生 二.Java ...
- centos7上开启单用户模式
author: headsen chen date : 2018-08-02 11:23:16 1,在出现centos7的页面的时候,按 e进入到编译内核的界面 2,找到下面的这一段,将ro 该车 ...