Python 调用外部命令
python 可以使用 os 模块来调用外部的 Linux Shell 命令,常用的方法如下:
os.system():结果输出在终端上,捕获不到
os.popen() : 结果返回一个对象,即标准输出
os.popen2():结果返回两个对象,分别是标准输入,标准输出
os.popen3():结果返回三个对象,分别是标准输入,标准输出,标准错误输出
os.popen4():结果返回两个对象,分别是标准输入,标准输出(标准输出中包括标准错误输出)
In [2]: stdout = os.system('ls /data') # os.system() --- 结果输出在终端上,会返回执行命令的状态码,我们可以用变量来接收
1.txt 2.txt 3.txt
In [3]: print(stdout)
0
In [7]: stdout = os.popen('ls /data') # os.popen() --- 结果返回一个对象,即标准输出,标准输出需要用read()、readlines()等方法读取
In [8]: print stdout.read()
1.txt
2.txt
3.txt
In [24]: stdin, stdout = os.popen2('cat') # os.popen2() --- 结果返回两个对象,分别是标准输入,标准输出
In [25]: stdin.write('hello\n') # 我们使用 write() 来进行输入,使用 close() 来结束输入,使用 read() 来读取输出
In [26]: stdin.write('world\n')
In [27]: stdin.close()
In [28]: print stdout.read()
hello
world
使用 os 模块来调用 shell 命令已经过时了,官方建议我们使用 subprocess 模块,subprocess 会开启一个子进程(即shell)来执行命令:
subprocess.call() :用于执行 shell 命令,但结果不能被捕获到,只会输出到终端,如 subprocess.call('ls -l /data', shell=True)
subprocess.check_call() :用法与 call() 一致,不同的是,如果命令执行失败,会抛出 CalledProcessError 异常,我们可以根据这个异常去决定需要做什么
subprocess.Popen() :用于执行 shell 命令,结果返回三个对象,分别是标准输入,标准输出,标准错误输出
In [1]: from subprocess import Popen, PIPE
In [2]: p = Popen('ls /data', stdin=PIPE, stdout=PIPE, stderr=PIPE, shell=True) # stdin用于接收标准输入,可选参数,可以通过 p.stdin.write('xxx') 添加标准输入
# stdout用于接收标准输出,可选参数,可以通过 p.stdout.read() 读取标准输出
In [3]: p.stdout.read() # stderr用于接收标准错误输出,可选参数,可以通过 p.stderr.read() 读取标准错误输出
Out[3]: '1.txt\n2.txt\n3.txt\n' # shell=True用于表明该命令是在shell下执行的,如果不加上该参数会报错
# 如果我们没有用PIPE来接收标准输出和标准错误输出,则默认会打印到终端上
In [4]: p.stderr.read() # 另外要注意的是,当我们写成 p = Popen(...) 时,命令就已经执行了,执行后的结果放在管道(PIPE)里面
Out[4]: '' # subprocess.Popen()其他常用方法
线上的用法:
import subprocess def runCMD(self, ip, cmd, logfile):
out = ""
sshcmd = ''' ssh root@%s -n '%s' ''' % (ip, cmd)
p = subprocess.Popen(sshcmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
while True:
buff = p.stdout.readline()
if p.poll() != None and buff == "":
break
if buff:
out += buff
self.writeLogFile(logfile, buff)
return p.returncode, out
Python 调用外部命令的更多相关文章
- 如何在Python脚本中调用外部命令(就像在linux shell或Windows命令提示符下输入一样)
如何在Python脚本中调用外部命令(就像在linux shell或Windows命令提示符下输入一样) python标准库中的subprocess可以解决这个问题. from subprocess ...
- python 调用shell命令三种方法
#!/usr/bin/python是告诉操作系统执行这个脚本的时候,调用/usr/bin下的python解释器: #!/usr/bin/env python这种用法是为了防止操作系统用户没有将pyth ...
- Python调用外部系统命令
利用Python调用外部系统命令的方法可以提高编码效率.调用外部系统命令完成后可以通过获取命令执行返回结果码.执行的输出结果进行进一步的处理.本文主要描述Python常见的调用外部系统命令的方法,包括 ...
- python 调用 shell 命令方法
python调用shell命令方法 1.os.system(cmd) 缺点:不能获取返回值 2.os.popen(cmd) 要得到命令的输出内容,只需再调用下read()或readlines()等 ...
- Perl调用外部命令的方式和区别
主要的方式简述如下:1. system("command");使用该命令将开启一个子进程执行引号中的命令,父进程将等待子进程结束并继续执行下面的代码. 2. exec(" ...
- scala调用外部命令
scala调用外部命令 1. 导入sys.process包 2. 调用方式:" 外部命令 " ! 双引号内+外部命令+感叹号 例: scala调用外部命令工作原 ...
- PHP调用外部命令
------------------------------------------------------------------ 一.PHP调用外部命令总结 ...
- Perl调用外部命令(其他脚本、系统命令)的方法和区别
1. `command`; 使用反引号调用外部命令能够捕获其标准输出,并按行返回且每行结束处附带一个回车.反引号中的变量在编译时会被内插为其值. 2. open LIST "ls -l| ...
- python 调用 shell 命令
记录 python 调用 shell 命令的方法 加载 os 模块, 使用 os 类 import os; os.system("ls /");
随机推荐
- Java程序员应该了解的10个设计原则
引用: http://www.cnblogs.com/leehongee/archive/2012/03/18/2404760.html 面向对象设计原则是OOPS(Object-Oriented P ...
- Java调用存储过程小结
学生在学习jdbc的时候,会问到怎么调用存储过程,现在将java调用oracle存储过程的示例总结如下.(关于调用sqlserver的存储过程将在下次进行小结请关注) 一:无返回值的存储过程 存储过程 ...
- css3和jquery实现的可折叠导航菜单(适合手机网页)
之前为大家介绍了好几款css3导航,今天为大家在介绍的是一款适合放在手机网页的导航菜单.点击列表图标以下拉式的形式显示菜单,单击关闭,动画关闭.效果相当不错.效果图如下: 在线预览 源码下载 这个 ...
- jQuery (二)DOM 操作
一般jquery在web项目的只要作用就是取值和赋值了. 下面了入门下,这些值得获取. <!DOCTYPE html> <html> <head> <meta ...
- GIS+=地理信息+行业+大数据——基于云环境流处理平台下的实时交通创新型app
应用程序已经是近代的一个最重要的IT创新.应用程序是连接用户和数据之间的桥梁,提供即时訪问信息是最方便且呈现的方式也是easy理解的和令人惬意的. 然而,app开发人员.尤其是后端平台能力,一直在努力 ...
- 【Unity/SVN】使用SVN管理Unity项目
本文转载自:http://blog.csdn.net/neil3d/article/details/38437237 Unity提供了自己的XXXServer,不过大家评论好像不是很好用,主要是不支持 ...
- Qt 4.8.5 icpc: Command not found
icpc: Command not found 交叉编译Qt4.8.5的时候出现
- 路由表及route使用
路由表 linux下通过route可以查看本地路由表: Kernel IP routing table Destination Gateway Genmask ...
- cocos2dx3.2利用ProgressTimer组合成评分控件
一.制作背景 如今非常多游戏或者应用须要评分,就是一般来说满分10分,一般用星星来表示. 那么cocos2dx里面怎样制作评分这种控件呢? 我的打算是进度条组合成即可了. 二.材料准备 如上图所看到的 ...
- DOS建立带点的文件夹
md 表示make directory 创建文件夹 rd 表示remove directory 删除文件夹 我们用一个实例来说明一切吧. 1.按 键盘Windows徽标键+R 来打开 运行 对话框 2 ...