Python中执行外部命令
有很多需求需要在Python中执行shell命令、启动子进程,并捕获命令的输出和退出状态码,类似于Java中的Runtime类库。
subprocess模块的使用:
Python使用最广泛的是标准库的subprocess模块,用来替换os.system(),os.spawn*(),os.popen*()和commands.*等模块与函数。
使用subprocess最简单的方式就是用它提供的便利函数,call,check_all与check_output,当便利函数满足不了要求再使用Popen类。
1. call
subprocess(args,*,stdin=None,stout=None,stderr=None,shell=False)

shell=True,Python会先运行一个shell,再用shell解释字符串,而不是传递一个列表。
2. check_call
check_all与call类似,只是遇到异常情况返回的形式不同,它会抛出subprocess.CalledProcessError异常

3. check_output
这个便利函数是使用最多了,它可以获取命令的结果,而不是退出状态码

如果想要捕捉退出状态码,可以通过抛出的subprocess.CalledProcessError异常
import subprocess
try:
output = subprocess.check_output('ls /zz',shell=True)
except subprocess.CalledProcessError as e:
output = e.output
code = e.returncode
print (code,output)
执行结果:

如果想捕获命令的错误输出,需将错误输出重定向到标准输出
subprocess.check_output(['cmd','arg1','arg2'],stderr=subprocess.STDOUT)

4. 使用Popen
下面的exexute_cmd函数对Popen,进行了封装,执行成功,返回标准输出和状态码,失败是返回状态码和错误输出。
#!/usr/bin/python
#coding=utf8
import subprocess def execute_cmd(cmd):
p = subprocess.Popen(cmd,
shell=True,
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
stdout, stderr = p.communicate()
if p.returncode != 0:
return p.returncode, stderr
return p.returncode, stdout if __name__=='__main__':
cmd='ls /u01'
returncode,out=execute_cmd(cmd)
if returncode != 0:
raise SystemExit('execute {0} err :{1}'.format(cmd,out))
else:
print("execute command ({0} sucessful)".format(cmd))

目录不存时:

Python中执行外部命令的更多相关文章
- python中执行shell命令的几个方法小结(转载)
转载:http://www.jb51.net/article/55327.htm python中执行shell命令的几个方法小结 投稿:junjie 字体:[增加 减小] 类型:转载 时间:2014- ...
- Java中执行外部命令
在项目中执行一个linux的shell脚本,于是需要在java环境下执行外部命令如系统命令.linux命令的需求,本人小小研究了一下,又上网查了一些资料先整理如下. java执行外部命令主要依赖两个类 ...
- php在linux中执行外部命令
目录:一.PHP中调用外部命令介绍二.关于安全问题三.关于超时问题四.关于PHP运行linux环境中命令出现的问题 一.PHP中调用外部命令介绍在PHP中调用外部命令,可以用,1>调用专门函数. ...
- 在vim中执行外部命令
11.7.5 在Vim编辑器中执行Shell命令 有时需要在Vim编辑器中执行Shell命令,例如需要验证一个Shell命令是否正确,以便写入脚本中:需要在文件中引用某个Shell命令的输入等.本小 ...
- python中执行shell命令的几个方法小结
原文 http://www.jb51.net/article/55327.htm 最近有个需求就是页面上执行shell命令,第一想到的就是os.system, os.system('cat /proc ...
- python中执行shell命令行read结果
+++++++++++++++++++++++++++++ python执行shell命令1 os.system 可以返回运行shell命令状态,同时会在终端输出运行结果 例如 ipython中运行如 ...
- 【转】linux中执行外部命令提示" error while loading shared libraries"时的解决办法
今天在Centos下编译kapar 后执行时出错,老说: [root@dc01 ~]# kapar kapar: error while loading shared libraries: libsc ...
- 「Python」6种python中执行shell命令方法
用Python调用Shell命令有如下几种方式: 第一种: os.system("The command you want"). 这个调用相当直接,且是同步进行的,程序需要阻塞并等 ...
- python中执行shell命令的几个方法
1.os.system() a=os.system("df -hT | awk 'NR==3{print $(NF-1)}'") 该命令会在页面上打印输出结果,但变量不会保留结果, ...
随机推荐
- Sword redis配置
Redis 配置 Redis 的配置文件位于 Redis 安装目录下,文件名为 redis.conf. --查看配置 你可以通过 CONFIG 命令查看或设置配置项(使用CONFIG必须在redis客 ...
- Three ways to make your WPF images pop out on MouseOver
There are a couple of ways in WPF to make an image pop out when moving mouse over it. Of course we w ...
- 初试PyOpenGL二 (Python+OpenGL)基本地形生成与高度检测
在上文中,讲述了PyOpenGL的基本配置,以及网格,球形的生成,以及基本的漫游.现在利用上一篇的内容,来利用高程图实现一个基本的地形,并且,利用上文中的第三人称漫游,以小球为视角,来在地形上前后左右 ...
- Android 耳机插入过程分析 (AudioManager部分)
接上一篇,记录audioManager对耳机插入的操作 https://www.cnblogs.com/helloworldtoyou/p/9868890.html 主要是发送广播,另外更新音频通路 ...
- e741. 将标签的焦点置于关联的文本框上面
This example associates a label with a text field using setLabelFor(). A mnemonic is set on the labe ...
- JAVA写代码必须知道的编程工具
Eclipse: 一个开放源代码的.基于Java的可扩展开发平台. NetBeans: 开放源码的Java集成开发环境,适用于各种客户机和Web应用. IntelliJ IDEA: 在代码自动提示.代 ...
- Shiro Demo
http://www.sojson.com/shiro http://blog.csdn.net/swingpyzf/article/details/46342023/
- linux命令中的head命令
head命令和tail命令就像他的名字一样浅显易懂,它是用来显示开头或者结尾某个数量的文字区块,head用来显示档案的开头至标准输出当中,而tail想当然就是查看档案的结尾. 命令格式 head [ ...
- u3d外部资源加载加密
原文地址:http://www.cnblogs.com/88999660/archive/2013/04/10/3011912.html 首先要鄙视下unity3d的文档编写人员极度不负责任,到发帖为 ...
- iptables filter表小案例
案例1:把80端口,22端口,21端口放行 22端口指定IP访问,其它IP拒绝. shell脚本实现: [root@centos7 ~]# vim /usr/local/sbin/iptables.s ...