(转载)python调用shell命令之os 、commands、subprocess
linux系统下进入python交互式环境:
一、os 模块
1.1.os模块的exec方法簇:
python交互界面中:
In [1]: import osIn [2]: os.exec
os.execl os.execlp os.execv os.execvp
os.execle os.execlpe os.execve os.execvpe In [2]: os.execl?
Type: function
String form: <function execl at 0xb73673e4>
File: /home/shifeng/anaconda/lib/python2.7/os.py
Definition: os.execl(file, *args)
Docstring:
execl(file, *args)Execute the executable file with argument list args, replacing the
current process.
os.exec+Tab键智能提示能够看到有8个,help(os.execl)等能够找到其使用方法说明。
1.2.os模块的system方法
system方法会创建子进程执行外部程序。方法仅仅返回外部程序的执行结果。0表示执行成功。
In [10]: os.system("echo \"hello world\"")
hello world
Out[10]: 0In [11]: os.system("ls")
all_roc_plot.py~ task1_feature_all2.py test.py test.sh ui_without_buy~
scrapy_work test test.py~ test.sh~
Out[11]: 0In [12]: os.system("cat test.sh")
echo "hello world"
Out[12]: 0In [13]: os.system("sh test.sh")
hello world
Out[13]: 0
如上。一些主要的shell命令,传入os.system()參数里面,便能运行。
只是无法得到命令的返回值。
1.3.os模块popen方法
popen方法可以得到shell命令的返回值。os.popen(cmd)后,须要再调用read()或者readlines()这两个命令。输出结果。
In [14]: os.popen("ls")
Out[14]: <open file 'ls', mode 'r' at 0xb67efd30>In [15]: os.popen("ls").read()
Out[15]: 'all_roc_plot.py~\nscrapy_work\ntask1_feature_all2.py\ntest\ntest.py\ntest.py~\ntest.sh\ntest.sh~\nui_without_buy~\n'In [16]: os.popen("ls").readlines()
Out[16]:
['all_roc_plot.py~\n','scrapy_work\n','task1_feature_all2.py\n','test\n','test.py\n','test.py~\n','test.sh\n','test.sh~\n','ui_without_buy~\n']In [17]: s = os.popen("ls").read()In [18]: for i in s.split("\n"):....: print i....:
all_roc_plot.py~
scrapy_work
task1_feature_all2.py
test
test.py
test.py~
test.sh
test.sh~
ui_without_buy~
注意。read()或者readlines()后,其每一个元素包括一个回车符\n。
二、commands模块
使用commands模块的getoutput方法,这样的方法同popend的差别在于popen返回的是一个文件句柄,而本方法将外部程序的输出结果当作字符串返回。非常多情况下用起来要更方便些。
主要方法:
* commands.getstatusoutput(cmd) 返回(status, output)
* commands.getoutput(cmd) 仅仅返回输出结果
* commands.getstatus(file) 返回ls -ld file的运行结果字符串,调用了getoutput。不建议使用此方法
In [8]: import commands In [9]: commands.getoutput("ls")
Out[9]: 'all_roc_plot.py~\nscrapy_work\ntask1_feature_all2.py\ntest\ntest.py\ntest.py~\ntest.sh\ntest.sh~\nui_without_buy~'In [10]: commands.getstatusoutput("ls")
Out[10]:
(0,'all_roc_plot.py~\nscrapy_work\ntask1_feature_all2.py\ntest\ntest.py\ntest.py~\ntest.sh\ntest.sh~\nui_without_buy~')
三、subprocess模块
使用subprocess模块能够创建新的进程。能够与新建进程的输入/输出/错误管道连通。并能够获得新建进程运行的返回状态。使用subprocess模块的目的是替代os.system()、os.popen*()、commands.*等旧的函数或模块。
3.1.subprocess.call(["some_command","some_argument","another_argument_or_path"])
subprocess.call(command,shell=True)
使用subprocess模块能够创建新的进程,能够与新建进程的输入/输出/错误管道连通。并能够获得新建进程运行的返回状态。使用subprocess模块的目的是替代os.system()、os.popen*()、commands.*等旧的函数或模块。
In [11]: from subprocess import callIn [12]: call(["ls","-l"])
总用量 40
-rw-rw-r-- 1 shifeng shifeng 3266 5月 3 14:14 all_roc_plot.py~
drwxrwxr-x 6 shifeng shifeng 4096 6月 18 16:59 scrapy_work
-rw-rw-r-- 1 shifeng shifeng 12786 6月 10 10:20 task1_feature_all2.py
drwxrwxr-x 2 shifeng shifeng 4096 6月 8 11:36 test
-rw-rw-r-- 1 shifeng shifeng 3649 6月 19 10:21 test.py
-rw-rw-r-- 1 shifeng shifeng 255 6月 11 21:21 test.py~
-rw-rw-r-- 1 shifeng shifeng 19 6月 25 19:49 test.sh
-rw-rw-r-- 1 shifeng shifeng 0 6月 25 19:49 test.sh~
-rw-rw-r-- 1 shifeng shifeng 0 4月 8 22:15 ui_without_buy~
Out[12]: 0In [13]: from subprocess import PopenIn [14]: Popen(["ls","-l"])
Out[14]: <subprocess.Popen at 0xb67c91ac>In [15]: 总用量 40
-rw-rw-r-- 1 shifeng shifeng 3266 5月 3 14:14 all_roc_plot.py~
drwxrwxr-x 6 shifeng shifeng 4096 6月 18 16:59 scrapy_work
-rw-rw-r-- 1 shifeng shifeng 12786 6月 10 10:20 task1_feature_all2.py
drwxrwxr-x 2 shifeng shifeng 4096 6月 8 11:36 test
-rw-rw-r-- 1 shifeng shifeng 3649 6月 19 10:21 test.py
-rw-rw-r-- 1 shifeng shifeng 255 6月 11 21:21 test.py~
-rw-rw-r-- 1 shifeng shifeng 19 6月 25 19:49 test.sh
-rw-rw-r-- 1 shifeng shifeng 0 6月 25 19:49 test.sh~
-rw-rw-r-- 1 shifeng shifeng 0 4月 8 22:15 ui_without_buy~
1、subprocess.call(command, shell=True)#会直接打印出结果。
2、subprocess.Popen(command, shell=True) 也能够是subprocess.Popen(command, stdout=subprocess.PIPE, shell=True) 这样就能够输出结果了。假设command不是一个可运行文件,shell=True是不可省略的。shell=True意思是shell下运行command。
#========================下面转载============
四、 众方法的比較以及总结
4.1. 关于 os.system
os.system("some_command with args")将命令以及參数传递给你的系统shell。这非常好,由于你能够用这样的方法同一时候执行多个命令而且能够设置管道以及输入输出重定向。比方:
os.system("some_command < input_file | another_command > output_file")
然而,尽管这非常方便,可是你须要手动处理shell字符的转义,比方空格等。此外。这也仅仅能让你执行简单的shell命令并且不能执行外部程序。
4.2. 关于os.popen
使用stream = os.popen("some_command with args")也能做与os.system一样的事。与os.system不同的是os.popen会给你一个像文件的对象从而你能够使用它来訪问哪个程序的标准输入、输出。
并且popen还有三个变种都是在I/O处理上有轻微不同。假如你通过一个字符串传递全部东西。你的命令会传递给shell;假设你通过一个列表传递他们。你不用操心逃避不论什么事。
4.3. 关于subprocess.popen
subprocess模块的Popen类,意图作为os.popen的替代,可是由于其非常全面所以比os.popen要显得略微复杂。使用起来须要学习哦~~。
比方你能够使用 print Popen("echo Hello World", stdout=PIPE, shell=True).stdout.read() 来替代 print os.popen("echo Hello World").read()。
可是相比之下它使用一个统一的类包含4中不同的popen函数还是不错的。
4.4. 关于subprocess.call
subprocess模块的call函数。
它基本上就像Popen类并都使用同样的參数,可是它仅仅简单的等待命令完毕并给你返回代码。比方:
return_code = subprocess.call("echo Hello World", shell=True)
五、实战
见之前博文:Python脚本之安装linux源码包-Jenkins 。
参考
转载于:https://www.cnblogs.com/hoaprox/p/10174076.html
(转载)python调用shell命令之os 、commands、subprocess相关推荐
- python调用shell命令
在python程序中调用shell命令 1. os.system(command) 此函数会启动子进程,在子进程中执行command,并返回command命令执行完毕后的退出状态,如果command有 ...
- python调用shell命令-Python调用shell命令常用方法(4种)
方法一.使用os模块的system方法:os.system(cmd),其返回值是shell指令运行后返回的状态码,int类型,0表示shell指令成功执行,256表示未找到,该方法适用于shell命令 ...
- python调用shell命令-用Python调用Shell命令
Python经常被称作"胶水语言",因为它能够轻易地操作其他程序,轻易地包装使用其他语言编写的库,也当然可以用Python调用Shell命令. 用Python调用Shell命令有如 ...
- python调用shell命令-在Python中执行shell命令的6种方法,你都知道吗?
原标题:在Python中执行shell命令的6种方法,你都知道吗? Python经常被称作"胶水语言",因为它能够轻易地操作其他程序,轻易地包装使用其他语言编写的库.今天我们就讲解 ...
- python调用shell命令-「Python」6种python中执行shell命令方法
用Python调用Shell命令有如下几种方式: 第一种: os.system("The command you want"). 这个调用相当直接,且是同步进行的,程序需要阻塞并等 ...
- python 执行shell_用Python调用Shell命令
Python经常被称作"胶水语言",因为它能够轻易地操作其他程序,轻易地包装使用其他语言编写的库,也当然可以用Python调用Shell命令. 用Python调用Shell命令有如 ...
- python 调用shell命令的方法
转载: https://www.cnblogs.com/thinker-lj/p/3860123.html https://www.cnblogs.com/wenwangt/p/4897961.htm ...
- python 调用linux命令-Python调用shell命令常用方法
Python调用shell指令 方法一.使用os模块的system方法:os.system(cmd),其返回值是shell指令运行后返回的状态码,int类型,0表示shell指令成功执行,256表示未 ...
- python调用shell命令-python调用shell命令小结
在写python脚本的时候,经常需要调用系统命令,常用的python调用系统命令的方法主要有subprocess.call和os.popen.默认情况下subprocess.call的方法结果是返回值 ...
最新文章
- stm32和51单片机的区别,先学51还是先学stm32?
- ELK 企业级日志分析系统
- Apache虚拟主机指南
- json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
- CABasicAnimation动画
- python---内置模块
- 机动车c1科三考试语言灯光,c1科目三灯光模拟考试
- 9.2. service
- Laravel 之 Redis 命令大全
- 手机端APP防盗链配置问题
- JAVA基础算法练习(2):猜年龄
- c语言改变图片颜色,用c语言把bmp格式的彩色图片转换成黑白的
- [学习笔记]多元线性回归分析——理解篇
- vs2012 mvc3项目ObjectContext与DBContext
- 乐视网TV版为何能成付费视频用户第一选择?
- 上海亚商投顾:沪指逼近2900点 两市超4500股飘绿
- Android Zenmode/DND(勿扰模式) 实现原理剖析
- 由asn1编码引发对sm2签名长度思考
- itoa函数,srpintf()函数 ,atoi函数
- archlinux 查询和删除软件
热门文章
- 如何搜索旅行的好地方(MongoDb LINQ和.NET Core)
- UML2.0 学习笔记
- 使C#代码现代化——第二部分:方法
- python定义空array_Python惯用技巧
- matplotlib 柱状图 分组_Python数据分析与可视化之matplotlib可视化(三)
- JS计算两个日期时间差,天 小时 分 秒格式
- java partialfunction,Java Relation.partialFunction方法代碼示例
- 货物配送问题的matlab,免疫算法求解配送中心选址问题matlab代码
- 怎么在Java里辨别小数_求教java中如何判断一个数是不是小数,求详细代码及解释...
- android 短信ril移植,将Android平台的RIL层移植到基于LINUX的通用平台的研究与实现...