Python下调用Linux的Shell命令
转载:http://blog.csdn.net/my2010sam/article/details/18315785
有时候难免需要直接调用Shell命令来完成一些比较简单的操作,比如mount一个文件系统之类的。那么我们使用Python如何调用Linux的Shell命令?下面来介绍几种常用的方法:
1. os 模块
1.1. os模块的exec方法族
1.2. os模块的system方法
system方法会创建子进程运行外部程序,方法只返回外部程序的运行结果。这个方法比较适用于外部程序没有输出结果的情况。
- >>> import os
- >>> os.system("echo \"Hello World\"") # 直接使用os.system调用一个echo命令
- Hello World ——————> 打印命令结果
- 0 ——————> What's this ? 返回值?
- >>> val = os.system("ls -al | grep \"log\" ") # 使用val接收返回值
- -rw-r--r-- 1 root root 6030829 Dec 31 15:14 log ——————> 此时只打印了命令结果
- >>> print val
- 0 ——————> 注意,此时命令正常运行时,返回值是0
- >>> val = os.system("ls -al | grep \"log1\" ")
- >>> print val
- 256 ——————> 使用os.system调用一个没有返回结果的命令,返回值为256~
- >>>
注意:上面说了,此方法脂肪会外部程序的结果,也就是os.system的结果,所以如果你想接收命令的返回值,接着向下看~
1.3. os模块的popen方法
- >>> os.popen('ls -lt') # 调用os.popen(cmd)并不能得到我们想要的结果
- <open file 'ls -lt ', mode 'r' at 0xb7585ee8>
- >>> print os.popen('ls -lt').read() # 调用read()方法可以得到命令的结果
- total 6064
- -rwxr-xr-x 1 long long 23 Jan 5 21:00 hello.sh
- -rw-r--r-- 1 long long 147 Jan 5 20:26 Makefile
- drwxr-xr-x 3 long long 4096 Jan 2 19:37 test
- -rw-r--r-- 1 root root 6030829 Dec 31 15:14 log
- drwxr-xr-x 2 long long 4096 Dec 28 09:36 pip_build_long
- drwx------ 2 Debian-gdm Debian-gdm 4096 Dec 23 19:08 pulse-gylJ5EL24GU9
- drwx------ 2 long long 4096 Jan 1 1970 orbit-long
- >>> val = os.popen('ls -lt').read() # 使用变量可以接收命令返回值
- >>> if "log" in val: # 我们可以使用in来判断返回值中有木有一个字符串
- ... print "Haha,there is the log"
- ... else:
- ... print "No,not happy"
- ...
- Haha,there is the log
2. commands 模块
使用commands模块的getoutput方法,这种方法同popend的区别在于popen返回的是一个类文件对象,而本方法将外部程序的输出结果当作字符串返回,很多情况下用起来要更方便些。
主要方法:
* commands.getstatusoutput(cmd) 返回(status, output)
* commands.getoutput(cmd) 只返回输出结果
* commands.getstatus(file) 返回ls -ld file的执行结果字符串,调用了getoutput,不建议使用此方法
- long@zhouyl:/tmp/tests$ python
- Python 2.7.3 (default, Jan 2 2013, 16:53:07)
- [GCC 4.7.2] on linux2
- Type "help", "copyright", "credits" or "license" for more information.
- >>> import commands
- >>> commands.getstatusoutput('ls -lt') # 返回(status, output)
- (0, 'total 5900\n-rwxr-xr-x 1 long long 23 Jan 5 21:34 hello.sh\n-rw-r--r-- 1 long long 147 Jan 5 21:34 Makefile\n-rw-r--r-- 1 long long 6030829 Jan 5 21:34 log')
- >>> commands.getoutput('ls -lt') # 返回命令的输出结果(貌似和Shell命令的输出格式不同哈~)
- 'total 5900\n-rwxr-xr-x 1 long long 23 Jan 5 21:34 hello.sh\n-rw-r--r-- 1 long long 147 Jan 5 21:34 Makefile\n-rw-r--r-- 1 long long 6030829 Jan 5 21:34 log'
- >>> commands.getstatus('log') # 调用commands.getoutput中的命令对'log'文件进行相同的操作
- '-rw-r--r-- 1 long long 6030829 Jan 5 21:34 log'
- >>>
3. subprocess模块
- >>> from subprocess import call
- >>> call(["ls", "-l"])
subprocess与system相比的优势是它更灵活(你可以得到标准输出,标准错误,“真正”的状态代码,更好的错误处理,等..)。我认为使用os.system已过时,或即将过时。
4. 众方法的比较以及总结
4.1. 关于 os.system
4.2. 关于os.popen
4.3. 关于subprocess.popen
4.4. 关于subprocess.call
os模块中还有C中那样的fork/exec/spawn函数,但是我不建议直接使用它们。 subprocess可能更加适合你。
下面是对于文中所涉及的内容的python官方文档:
[4] http://docs.python.org/library/subprocess.html#replacing-older-functions-with-the-subprocess-module -- 关于使用subprocess 替代老的方法
[5] http://docs.python.org/lib/os-process.html -- os的exec方法族以及system方法
[6] http://docs.python.org/lib/os-newstreams.html -- os的popen方法
[7] http://docs.python.org/lib/node528.html -- os的subprocess介绍
Python下调用Linux的Shell命令相关推荐
- python shell运行当前程序、可以按下_Python下调用Linux的Shell命令的方法
有时候难免需要直接调用Shell命令来完成一些比较简单的操作,比如mount一个文件系统之类的.那么我们使用Python如何调用Linux的Shell命令?下面来介绍几种常用的方法: 1. os 模块 ...
- python 如何调用linux系统中命令
首先加载os模块 >>> import os 然后就可以愉快的调用linux系统的命令使用了 >>> os.system('ls') anaconda-ks.cfg ...
- 八、Linux 常用 Shell 命令,控制台的快捷键以及 Shell 编程(中)
@Author : Runsen @Date:2020/9/11 文章是Runsen在Gitchat付费文章分享:Linux 常用 Shell 命令,控制台的快捷键以及 Shell 编程 顺便同步到C ...
- 如何在Python中调用Windows的cmd命令?
简 介: 利用os,commands,subprocess模块可以在python中调用windows中的命令.从使用方便性上来看,利用os.popen可以执行windows的程序并可以获得返回内容. ...
- Linux脚本Shell命令
在向大家详细介绍linux编译之前,首先让大家了解下Linux脚本Shell命令.然后讲解在shell脚本中可以使用任意的unix命令. 语法基本介绍 1.开头 程序必须以下面的行开始(必须方在文件的 ...
- linux shell 网页,Linux上shell命令
Linux上shell命令 Linux上shell命令 日期:2014-05-16 浏览次数:20328 次 Linux下shell命令 Linux下shell命令 adduser 创建新的用户账户 ...
- Linux基础shell命令 ls
Linux基础shell命令 ls ls 用来展示目录文件 man ls :官方文档显示所有的ls用法(其他命令也可用相同方法查看文档) ls [命令符选项] [文件路径(相对路径绝对路径均可)] [ ...
- 七、Linux 常用 Shell 命令,控制台的快捷键以及 Shell 编程(上)
@Author : Runsen @Date:2020/9/11 文章是Gitchat付费文章分享:Linux 常用 Shell 命令,控制台的快捷键以及 Shell 编程 顺便同步到CSDN中,这里 ...
- sharpssh远程linux监控系统,利用SharpSsh远程执行linux的shell命令
利用SharpSsh远程执行linux的shell命令 (2011-07-26 14:38:02) SharpSSH是一个C#的开源项目,可以利用SSH连接linux系统.并执行shell等命令. 而 ...
最新文章
- 微软沈向洋:写给AI新潮流——人工智能创作的五点建议
- HDU 5289 Assignment(单调队列)
- 小猿圈linux之使用VMware workstation安装Linux虚拟机
- Codeforces 524E Rooks and Rectangles 线段树
- react封装函数_GitHub - daifee/react-component: 用 React 封装一套常用组件
- Windows XP SP3 最终发布日期公布
- MVVM 下 ContextMenu的命令绑定
- ZOJ3556 How Many Sets I(容斥)
- tomcat 在WIN10 上运行出现500错误的解决方法
- python统计缺失值
- DFN-LOW算法---割点、桥、强连通分量
- HDU-1394 Minimum Inversion Number 线段树+逆序对
- 计算机一级考试题库基础知识,计算机一级考试题库(含答案)
- 数字PCR的特点、优势和局限性浅析
- 【挨踢人物传】李晨光:兴趣铸就专业,努力决定成败
- matlab拟合多自变量函数,多个自变量的函数拟合问题
- 用python抓取百万网易云热门评论[转载]
- EasyExcel初了解
- 餐饮加盟行业怎么找加盟商?线上怎么引流?这几招教你线上低成本获客!
- #读书笔记#《富爸爸窮爸爸》 | Rich Dad Poor Dad 罗伯特.清崎 Robert Kiyosaki
热门文章
- 搜索引擎反作弊之:整体技术思路
- 【终极方法】This method must return a result of type boolean
- 5行代码满分:L1-053 电子汪 (10分)
- [leetcode]19.删除链表的倒数第N个节点
- Web前端开发笔记——第四章 JavaScript程序设计 第四节 条件语句和循环语句
- (*长期更新)软考网络工程师学习笔记——Section 6 网络层上篇
- 程序员圣诞节相册源码_程序员分享圣诞刷屏源码,这次朋友圈千万不要再@微信官方了!...
- 环路的产生及RIP防环机制
- asp.net mysql打包_Asp.net与SQL一起打包部署安装
- keystore文件_如何手动给APK文件签名