subprocess实用手册

背景

python执行操作系统的命令,如python执行shell命令

subprocess模块主要用于创建子进程,并连接它们的输入、输出和错误管道,获取它们的返回状态。通俗地说就是通过这个模块,你可以在Python的代码里执行操作系统级别的命令,比如“ipconfig”、“du -sh”等等。

操作

引用

python自带subprocess包,直接import引入即可

import subprocess

常用方法

需要注意2.X版本和3.X版本

3.X版本

推荐使用run方法,3.5版本才新增该方法

大多数情况下,推荐使用run()方法调用子进程,执行操作系统命令。在更高级的使用场景,你还可以使用Popen接口。其实run()方法在底层调用的就是Popen接口。

run方法,执行args参数所表示的命令,等待命令结束,并返回一个CompletedProcess类型对象

args:表示要执行的命令。必须是一个字符串,字符串参数列表。

stdin、stdout和stderr:子进程的标准输入、输出和错误。其值可以是subprocess.PIPEsubprocess.DEVNULL、一个已经存在的文件描述符、已经打开的文件对象或者None。subprocess.PIPE表示为子进程创建新的管道。subprocess.DEVNULL表示使用os.devnull。默认使用的是None,表示什么都不做。另外,stderr可以合并到stdout里一起输出。

timeout:设置命令超时时间。如果命令执行时间超时,子进程将被杀死,并弹出TimeoutExpired异常。

check:如果该参数设置为True,并且进程退出状态码不是0,则弹出CalledProcessError异常。

encoding:如果指定了该参数,则stdin、stdout和stderr可以接收字符串数据,并以该编码方式编码。否则只接收bytes类型的数据。

shell:如果该参数为True,将通过操作系统的shell执行指定的命令。

实际例子:

>>> subprocess.run(["ls", "-l"])  # 没有对输出进行捕获
CompletedProcess(args=[‘ls‘, ‘-l‘], returncode=0)

>>> subprocess.run("exit 1", shell=True, check=True)
Traceback (most recent call last):
  ...
subprocess.CalledProcessError: Command ‘exit 1‘ returned non-zero exit status 1

>>> subprocess.run(["ls", "-l", "/dev/null"], stdout=subprocess.PIPE)
CompletedProcess(args=[‘ls‘, ‘-l‘, ‘/dev/null‘], returncode=0,
stdout=b‘crw-rw-rw- 1 root root 1, 3 Jan 23 16:23 /dev/null\n‘)

>>> subprocess.run("python --version", stdout=subprocess.PIPE)
CompletedProcess(args=‘python --version‘, returncode=0, stdout=b‘Python 3.6.1\r\n‘)

>>>s= subprocess.run("ipconfig", stdout=subprocess.PIPE)    # 捕获输出
>>>print(s.stdout.decode("GBK"))

# 在windows上执行netstat,并打印返回
info = sp.run(["netstat","-ano"], shell=True, stdout=sp.PIPE)
print(info.stdout.decode("GBK"))

2.X版本

因为历史问题,实际项目中python还是2.X版本;没有run方法,因此要使用Popen方法

用法和参数与run()方法基本类同,但是它的返回值是一个Popen对象,而不是CompletedProcess对象。

实际例子:

ip_info = sp.Popen(["netstat","-ano"], shell=True, stdout=sp.PIPE)
print(ip_info.stdout.read().decode("GBK"))

call方法

执行命令,返回命令的结果和执行状态,0或者非0

>>> res = subprocess.call(["ls","-l"])
总用量 28
-rw-r--r-- 1 root root   0 6月 16 10:28 1
drwxr-xr-x 2 root root 4096 6月 22 17:48 _1748
-rw-------. 1 root root 1264 4月 28 20:51 anaconda-ks.cfg
drwxr-xr-x 2 root root 4096 5月 25 14:45 monitor
-rw-r--r-- 1 root root 13160 5月  9 13:36 npm-debug.log
# 命令执行状态
>>> res
0

参考文档

http://www.liujiangblog.com/course/python/55

http://www.manongjc.com/article/2405.html

原文地址:https://www.cnblogs.com/jwentest/p/11307378.html

时间: 2024-11-15 22:39:30

subprocess实用手册的相关文章

关于格子之微信搭讪实用手册

飞碟说第134期:<微信搭讪实用手册>优酷视频在线观看.在社交平台如此发达的今天,一个微信号,加上一点搭讪技巧,就可以增加你拥有女朋友的可能性,让屌丝也拥有春天.好的搭讪能化腐朽为神奇,可以让被搭讪的女生对你有好感,甚至让你拥有一个女朋友.摆脱单身,从学会搭讪开始.能不能别那么俗,一开场就是“约吗?”,找女朋友不是找炮友,要记得把真心带上. 本期视频bgm汇总:3分10秒开始的片尾曲背景音乐:<?? ? ??? ?> 歌手:Mongoose  语言:韩语 (可以到qq音乐上搜索)片

【转载】Exchange 2010配置与安装实用手册

Exchange 2010配置与安装实用手册 在Exchange 2010配置的时候主要分三大部分,这分别是网络配置.准备存储以及相关的安装策略和过程.同时还需要注意和其他的Windows软件相协调. 本系列文章主要分为三个大部分,其中第一部分,介绍了Exchange 2007及早期版本为邮箱服务器提供的本地高可用性功能.在第二部分,将搭建一个包含两台服务器的实验环境,以实现一种包括两个DAG成员的解决方案.这两台Exchange 2010服务器放置在同一数据中心的相同活动目录站点,而且将配置为

TPO1-48口语实用手册(文本词汇+短语)

TPO1 TASK 3 Administration  n. 管理部门 Acquire  v. 获得 Sculpture  n. 雕塑 Oppose  v. 反对 Financial  adj. 经济的 Tuition  n. 学费 Reserve  v. 保留保存 Steel plates n. 钢板 jutting out the earth 从地面上突出 odd  adj. 奇怪的 purchase  v. 购买购置 donor n. 捐赠者 anonymous adj. 匿名的 assu

vsFTPD编译安装使用实用手册

实验环境:系统 CENTOS5.5,用户 root,软件 vsftpd-2.3.4实验以自行编安装为基础,与通过yum方式安装存在一些差异. (lykyl原创,转载请注明出处) 一.编译安装1.获取并解压缩源码wget ftp://vsftpd.beasts.org/users/cevans/vsftpd-2.3.4.tar.gz /usr/local/src/tar -xvzf /usr/local/src/vsftpd-2.3.4.tar.gz 2.系统环境设置添加vsftpd的服务启动用户

NMAP实用手册

nmap在网络和渗透中使用相当频繁,相关教程也层出不穷.在此,我只整理出最实用的,言简意赅,方便自己,方便他人. 一.nmap介绍 NMAP,也就是Network Mapper,最早是Linux下的网络扫描和嗅探工具包. 二.nmap功能 1.主机发现:   //探测存活主机 2.端口扫描:   //探测开放端口及端口的服务 3.版本侦测:   //探测服务的版本,eg:httpd 1.0 4.OS检测.    //检测目标的操作系统. 5.漏洞扫描.   //配合一些特定漏洞扫描脚本进行漏扫(

android自定义permission简单实用手册

自定义permission可以提高app的安全性.通过设定permission,可以保护app免受非法授权的app的访问.比如我们在androidmanifest.xml中会注册activity/service/reciever,在intent-filter中filter我们要接收的action,如果有个不是我们知道的发送源发给我们一个匹配的action,就有可能影响到我们的app,甚至可能危害到用户. 如何使用 注册permission 在对应的activity/service和recieve

python urlparse模块的实用手册

#!/usr/bin/env python # -*- coding: utf-8 -*- import urlparse cve = 'CVE-2012-2143' path = '/' + cve + '.html' cveUrl = "http://cve.scap.org.cn/CVE-2015-2976.html"    #URL parsedUrl = urlparse.urlparse(cveUrl)                   #解构为tuple元组 print

好几年才收集到的软件,分享给大家。。。

QQ:365543212Email:[email protected]请按Clrt+F查找,输入软件关键字查询(不要输入版本号),如果找不到,您可以咨询客服.................FD......................12D MODEL 7.0 规划设计232Analyzer v4.1 高级串口分析监测3D Home Architect Design Suite Deluxe 8.0 室内装潢3D Profiler Tools 11.2 For Archicad 113D R

【转】朱兆祺带你一步一步学习嵌入式(连载)

原文网址:http://bbs.elecfans.com/jishu_357014_2_1.html#comment_top  从最初涉及嵌入式Linux开始到现在,深深的知道嵌入式的每一步学习都是举步维艰.从去年11月份开始,我就着手整理各种学习资料,希望推动嵌入式学习的前进贡献自己微不足道的一份力量.从去年到现在,将C语言的学习经验整理成<攻破C语言笔试与机试陷阱及难点>(现在仍在更新),这份资料已经在电子发烧友论坛的单片机论坛连载(http://bbs.elecfans.com/jish