python使用shell命令_python 调用shell命令的方法

在python程序中调用shell命令,是件很酷且常用的事情……

1. os.system(command)

此函数会启动子进程,在子进程中执行command,并返回command命令执行完毕后的退出状态,如果command有执行内容,会在标准输出显示。这实际上是使用C标准库函数system()实现的。

缺点:这个函数在执行command命令时需要重新打开一个终端,并且无法保存command命令的执行结果。

实例:os.system('ls -l *')

2. os.popen(command,mode)

打开一个与command进程之间的管道。这个函数的返回值是一个文件对象,可以读或者写(由mode决定,mode默认是’r')。如果mode为’r',可以使用此函数的返回值调用read()来获取command命令的执行结果。

os.system(cmd)或os.popen(cmd),前者返回值是脚本的退出状态码,后者的返回值是脚本执行过程中的输出内容。实际使用时视需求情况而选择。

实例:tmp = os.popen('ls -l *').readlines()

3. commands.getstatusoutput(command)

使用os.popen()函数执行command命令并返回一个元组(status,output),分别表示command命令执行的返回状态和执行结果。对command的执行实际上是按照{command;} 2>&1的方式,所以output中包含控制台输出信息或者错误信息。output中不包含尾部的换行符。

4. subprocess模块

此模块在python2.4中初次亮相,其中集中了关于进程的诸多操作,其中的call()完全替代了system(),而popen()被更为丰富的Popen类替代;

总结:python提供了十分完善的调用shell命令的功能,在实战中,我碰到的问题,有system和popen基本可全部搞定;

1 os.system

可以返回运行shell命令状态,同时会在终端输出运行结果

例如 ipython中运行如下命令,返回运行状态status

copycode.gif

os.system('cat /etc/passwdqc.conf')

min=disabled,24,11,8,7max=40passphrase=3match=4similar=deny

random=47enforce=everyone

retry=3Out[6]: 0

copycode.gif

2 os.popen()

可以返回运行结果

popen(command [, mode='r' [, bufsize]]) ->pipe

Open a pipe to/from a command returning a file object.

运行返回结果

copycode.gif

In [20]: output = os.popen('cat /proc/cpuinfo')

In [21]: lineLen =[]

In [22]: for line inoutput.readlines():

lineLen.append(len(line))

....:

In [23]: line

line lineLen

In [23]: lineLen

Out[23]:

[14,

25,

...

copycode.gif

3 如何同时返回结果和运行状态,commands模块:

copycode.gif

#String form:

File: /usr/lib64/python2.7/commands.py

Docstring:

Execute shell commands via os.popen() and returnstatus, output.

Interface summary:

importcommands

outtext =commands.getoutput(cmd)

(exitstatus, outtext) =commands.getstatusoutput(cmd)

outtext = commands.getstatus(file) #returns output of "ls -ld file"

A trailing newline is removed fromthe output string.

Encapsulates the basic operation:

pipe = os.popen('{ ' + cmd + '; } 2>&1', 'r')

text =pipe.read()

sts = pipe.close()

copycode.gif

commands示例如下:

copycode.gif

In [24]: (status, output) = commands.getstatusoutput('cat /proc/cpuinfo')

In [25]: status

Out[25]: 0

In [26]: len(output)

Out[26]: 3859

copycode.gif

4 使用模块subprocess

通常项目中经常使用方法为subporcess.Popen, 我们可以在Popen()建立子进程的时候改变标准输入、标准输出和标准错误,并可以利用subprocess.PIPE将多个子进程的输入和输出连接在一起,构成管道(pipe):

importsubprocess

child1 = subprocess.Popen(["ls","-l"], stdout=subprocess.PIPE)

child2 = subprocess.Popen(["wc"], stdin=child1.stdout,stdout=subprocess.PIPE)

out =child2.communicate()

print(out)

在例如使用lsblk查看swap分区的uuid:

copycode.gif

importsubprocess

child = subprocess.Popen(["lsblk", "-f"], stdout=subprocess.PIPE)

out =child.stdout.readlines()

swap_uuid =None

for item inout:

line =item.strip().split()

if len(line) == 4:

if(line[1] == 'swap'):

swap_uuid = line[2]

print(swap_uuid)

copycode.gif

ipython 中运行"?subprocess"可以发现subprocess是python用来替换os.popen()等管道操作命令的新模块

copycode.gif

A more real-world example would look like this:

try:

retcode = call("mycmd" + "myarg", shell=True)

if retcode <0:

print >>sys.stderr, "Child was terminated by signal", -retcode

else:

print >>sys.stderr, "Child returned", retcode

exceptOSError, e:

print >>sys.stderr, "Execution failed:", e

copycode.gif

相对于上面几种方式,subprocess便于控制和监控进程运行结果,subprocess提供多种函数便于应对父进程对子进程不同要求:

4.1.1 subprocess.call()

父进程父进程等待子进程完成,返回exit code

4.1.2 subprocess.check_call()

父进程等待子进程完成,返回0,如果returncode不为0,则举出错误subprocess.CalledProcessError,该对象包含有returncode属性,可用try...except...来检查

4.1.3 subprocess.check_output()

父进程等待子进程完成

返回子进程向标准输出的输出结果

检查退出信息,如果returncode不为0,则举出错误subprocess.CalledProcessError,该对象包含有returncode属性和output属性,output属性为标准输出的输出结果,可用try...except...来检查

例如:

In [32]: out = subprocess.call("ls -l", shell=True)

total 42244

-rw-rw-r--. 1 *** *** 366 May 26 09:10 ChangeLog

4.2.1

上面三个函数都是源于Popen()函数的wapper(封装),如果需要更加个性化应用,那么就需要使用popen()函数

Popen对象创建后,主程序不会自动等待子进程完成。我们必须调用对象的wait()方法,父进程才会等待 (也就是阻塞block)

copycode.gif

[wenwt@localhost syntax]$ rm subprocess.pyc

[wenwt@localhost syntax]$ python process.py

parent process

[wenwt@localhost syntax]$ PING www.google.com (173.194.219.99) 56(84) bytes of data.

^C

[wenwt@localhost syntax]$

--- www.google.com ping statistics ---

5 packets transmitted, 0 received, 100% packet loss, time 3999ms

copycode.gif

加上wait方法:

copycode.gif

[wenwt@localhost syntax]$ python process.py

PING www.google.com (173.194.219.103) 56(84) bytes of data.

--- www.google.com ping statistics ---

5 packets transmitted, 0 received, 100%packet loss, time 3999ms

parent process

copycode.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/489267.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java中必检异常有哪些_Java面试题经典面试题220道(附答案)

Java基础&#xff1a;1.JDK 和 JRE 有什么区别&#xff1f;2. 和 equals 的区别是什么&#xff1f; 解读3. 两个对象的 hashCode() 相同&#xff0c; 那么 equals() 也一定为 true吗&#xff1f;4. final 在 Java 中有什么作用&#xff1f;5. Java 中的 Math. round(-1. 5) 等…

11项关键先进制造技术解读!

来源&#xff1a;中国指挥与控制学会图片&#xff1a;来源于网络上届美国总统奥巴马非常重视制造业。其发起成立的“先进制造业合作委员会”&#xff0c;Advanced Manufacturing Partnership&#xff0c;就未来制造业的发展做出了展望&#xff0c;重点规划11个技术领域&#xf…

网站程序数据库怎么上传到服务器上,网站的数据库怎么上传到服务器

网站的数据库怎么上传到服务器 内容精选换一换通常在将数据导入数据库前&#xff0c;即将入库的数据已经在相关主机上了。我们称这种保存着待入库数据的服务器为数据服务器。此时&#xff0c;只需检测以确认数据服务器和GaussDB(for openGauss)集群能够正常通信&#xff0c;并查…

知道接口地址 如何传数据_数据不知道如何可视化?一款工具推荐给大家

之前我们介绍过 Python 里面的一些数据分析和可视化工具&#xff0c;比如 Pandas、Modin、Dash 等。今天要介绍一款标星 12.1K 的数据可视化工具 bokeh&#xff0c;优雅、简洁、高性能的交互式可视化库&#xff0c;同时支持大数据量和流式数据。其中 PyPI 和 Conda 每月安装超过…

c# 从一组数中随机抽取一定个数_Python随机模块22个函数详解

随机数可以用于数学&#xff0c;游戏&#xff0c;安全等领域中&#xff0c;还经常被嵌入到算法中&#xff0c;用以提高算法效率&#xff0c;并提高程序的安全性。平时数据分析各种分布的数据构造也会用到。random模块&#xff0c;用于生成伪随机数&#xff0c;之所以称之为伪随…

读书人:人机融合中的深度态势感知

雅典学院&#xff08;拉斐尔&#xff09;来源&#xff1a;人机与认知实验室“你现在的气质里&#xff0c;藏着你走过的路&#xff0c;读过的书和爱过的人。"— 电影《卡萨布兰卡》里的一句话《追问人工智能》--刘伟 - 读书人视频如下&#xff1a;https://www.bilibili.com…

根据id 隐藏_明星ID价值四位数?吃鸡玩家崩溃:打工一个月工资还没名称值钱...

01你知道吗&#xff1f;和平精英游戏名称也很值钱&#xff1f;——最近&#xff0c;有这样一条消息出现在了我的面前&#xff0c;某和平精英角色明星名称的价格居然被捧到了千元之上&#xff0c;对&#xff0c;各位没有看错&#xff0c;虽然只是一个普普通通的游戏名称&#xf…

范式变革与规律涌现:世界科技发展新趋势

来源&#xff1a;学习时报新科技革命与产业变革持续展开&#xff0c;以人工智能为代表的新兴使能技术驶入“快车道”&#xff0c;世界科技创新被认为正在进入“认知革命”的阶段——对生命过程的“精微刻画与操作”和对人类智能的“逆向工程与强化”。趋势特征从“大停滞”迈向…

Unity5和WebGL移植指南的一些总结

对于手游开发者来说&#xff0c;更新版本往往意味着非常复杂的过程&#xff0c;你需要根据反馈做更新、测试、提交然后等待审核&#xff0c;而由于不需要客户端依赖&#xff0c;页游往往是快速测试游戏版本的最佳途径&#xff0c;很多人可能都知道Unity 5可以再不用Unity Web P…

java indexof方法_【3-14】Java中集合类list的增删改查

Hello&#xff0c;大家好&#xff0c;我是大家最亲爱的siki老师&#xff0c;每天都会在这里为大家带来一个Java语法中有趣的知识点&#xff0c;Q群175158287&#xff0c;欢迎同大家多多交流哈&#xff01;今天给大家带来的是Java中list类的使用&#xff0c;java.util 包提供了l…

清华大学孙富春教授:基于知识智能的机器人技能学习

来源&#xff1a;学术通在刚结束的2019中国人工智能产业年会分论坛——“知识智能及其产业应用论坛”上&#xff0c;清华大学计算机科学与技术系教授、中国人工智能学会副理事长、国家杰青孙富春教授发表了题为《基于知识智能的机器人技能学习》的报告。孙富春教授报告聚焦人工…

图书管理系统可行性分析报告范例_会做可行性分析报告贺州专家团队*金

金兰8564ertyu-03会做可行性分析报告贺州专家团队*金不满意全额&#xff0c;三年内免费提供修改服务&#xff0c;目前&#xff0c;金兰企划已为上万家客户及伙伴提供了专业、精准的商业策划服务&#xff0c;并得到了客户及行业的一致好评。会做可行性分析报告贺州专家团队*金金…

java开发项目实例_Alibaba内部出品Java突击手册,大量开发实战项目分享

前言Java作为目前最受欢迎的语言&#xff0c;每年都会有很多转行、跨行等等地人加入到开发大军中来&#xff0c;但是Java开发也是会遇到瓶颈的&#xff0c;当我们遇到瓶颈的时候就会去寻求发展突破&#xff0c;尤其是从Java开发高级工程师向架构师迈进的时候&#xff0c;需要大…

快递下单后取消订单_网约车定位地点不动,男子别的平台下单,没取消订单要付6.6元...

众所周知&#xff0c;在平台上网约车的时候&#xff0c;要是超出一定时间放鸽子&#xff0c;通常都是要扣除乘客部分钱&#xff0c;反之是司机取消了订单&#xff0c;平台同样会给司机处罚&#xff0c;在路程近的单子上&#xff0c;有些司机是接了后就不想跑&#xff0c;但是也…

5G概述和基本原理

来源&#xff1a;电子万花筒 未来智能实验室是人工智能学家与科学院相关机构联合成立的人工智能&#xff0c;互联网和脑科学交叉研究机构。未来智能实验室的主要工作包括&#xff1a;建立AI智能系统智商评测体系&#xff0c;开展世界人工智能智商评测&#xff1b;开展互联网&am…

以下选项中python用于异常处理结构_《Python 程序设计》复习题

目录 填空题 一、基础知识 二、序列 三、选择结构与循环结构和函数及面向对象、文件 选择题 一、Python 基础语法 二、基本数据类型 三、程序的控制结构 四、函数和代码复用 五、组合数据类型 六、面向对象&#xff1a; 七、文件 判断题 一、基础知识 二、序列 三、选择结构与循…

去掉边框_安卓也有堪比 VOUN 的加边框应用了,素材丰富到没朋友

iOS 系统中有一款可以给照片加边框的应用 VOUN&#xff0c;里面的相框档次很高&#xff0c;调整后的效果也很不错&#xff0c;但是安卓却没有一款类似的应用。开发者 Joey 尝试找了很多款相似的应用&#xff0c;结果不是广告就是骗流量的辣鸡应用&#xff0c;所以最后独自开发了…

物联网趋势下的边缘计算发展解析

来源&#xff1a;《NXP客栈》家居或商业应用&#xff0c;到互联车辆&#xff0c;边缘计算贯穿整个物联网。随着数据量的增加&#xff0c;这种计算需要具有最优网络安全功能与最高功能安全级别的强大互联边缘计算平台。创新通常成波出现&#xff08;图1&#xff09;。一些创新浪…

docker php 一键部署_Java开发提升十倍生产力:Idea远程一键部署springboot到Docker

IDEA是Java开发利器&#xff0c;springboot是Java生态中最流行的微服务框架&#xff0c;docker是时下最火的容器技术&#xff0c;那么它们结合在一起会产生什么化学反应呢&#xff1f;一、开发前准备1.Docker安装可以参考&#xff1a;https://docs.docker.com/install/2.配置do…

四个人过桥的题目_云南的几种“勾魂”特产,舌尖上的美味,让人回味无穷,你吃过吗...

云南&#xff0c;彩云之南&#xff0c;说到云南美食&#xff0c;大家可能第一反应都是“米线呀&#xff01;”害&#xff01;大云南的美食可多了&#xff0c;你可不能只知道这一个&#xff0c;号称花城的云南&#xff0c;这里的美食也是“遍地开花”。过桥米线一碗过桥米线&…