Python调用shell命令的几种方法(在新进程中执行shell命令)

转载 2017年09月17日 19:07:38

原文地址:http://blog.csdn.net/my2010sam/article/details/18315785

有时候难免需要直接调用Shell命令来完成一些比较简单的操作,比如mount一个文件系统之类的。那么我们使用Python如何调用Linux的Shell命令?下面来介绍几种常用的方法:
1. os 模块
1.1. os模块的exec方法族
Python的exec系统方法同Unix的exec系统调用是一致的。这些方法适用于在子进程中调用外部程序的情况,因为外部程序会替换当前进程的代码,不会返回。( 这个看了点 help(os)  --> search "exec" 的相关介绍,但是没太搞明白咋使用)
1.2. os模块的system方法
ystem方法会创建子进程运行外部程序,方法只返回外部程序的运行结果。这个方法比较适用于外部程序没有输出结果的情况。
注意:上面说了,此方法脂肪会外部程序的结果,也就是os.system的结果,所以如果你想接收命令的返回值,接着向下看~
1.3. os模块的popen方法
当需要得到外部程序的输出结果时,本方法非常有用,返回一个类文件对象,调用该对象的read()或readlines()方法可以读取输出内容。比如使用urllib调用Web API时,需要对得到的数据进行处理。os.popen(cmd) 要得到命令的输出内容,只需再调用下read()或readlines()等 如a=os.popen(cmd).read()
2. commands 模块
使用commands模块的getoutput方法,这种方法同popend的区别在于popen返回的是一个类文件对象,而本方法将外部程序的输出结果当作字符串返回,很多情况下用起来要更方便些。 主要方法:
*   commands.getstatusoutput(cmd)         返回(status, output) *   commands.getoutput(cmd)                   只返回输出结果 *   commands.getstatus(file)                     返回ls -ld file的执行结果字符串,调用了getoutput,不建议使用此方法
3. subprocess模块
根据Python官方文档说明,subprocess模块用于取代上面这些模块。有一个用Python实现的并行ssh工具—mssh,代码很简短,不过很有意思,它在线程中调用subprocess启动子进程来干活。
ubprocess与system相比的优势是它更灵活(你可以得到标准输出,标准错误,“真正”的状态代码,更好的错误处理,等..)。我认为使用os.system已过时,或即将过时。
4. 众方法的比较以及总结
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.pope
使用stream = os.popen("some_command with args")也能做与os.system一样的事,与os.system不同的是os.popen会返回一个类文件对象,使用它来访问标准输入、输出。
4.3. 关于subprocess.pope
ubprocess模块的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. 关于
ubprocess.call
ubprocess模块的call函数。它基本上就像Popen类并都使用相同的参数,但是它只简单的等待命令完成并给你返回代码。比如: return_code = subprocess.call("echo Hello World", shell=True) os模块中还有C中那样的fork/exec/spawn函数,但是我不建议直接使用它们。
ubprocess可能更加适合你。
===========================================
[1] http://demi-panda.com/2013/01/25/python-shell-command/index.html
[2] http://m.blog.csdn.net/blog/overstack/9295995
[3] http://blog.csdn.net/swiftshow/article/details/7755543
下面是对于文中所涉及的内容的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执行shell命令的几种方法

目前我使用到的python中执行cmd的方式有三种: 1. 使用os.system("cmd") 这是最简单的一种方法,特点是执行的时候程序会打出cmd在Linux上执行的信息。使用前需要...
  • zyaiwmy
  • zyaiwmy
  • 2017-01-11 10:27:37
  • 3808

Python下调用Linux的Shell命令

有时候难免需要直接调用Shell命令来完成一些比较简单的操作,比如mount一个文件系统之类的。那么我们使用Python如何调用Linux的Shell命令?下面来介绍几种常用的方法: 1. os 模块...
  • my2010Sam
  • my2010Sam
  • 2014-01-15 17:12:53
  • 80939

实用的 Python —— os.system() 在 python 语句中执行 dos 命令

import os (1)os.getcwd():首先查看当前工作目录 (2)os.chdir(”):切换文件夹 os.syetem(”) 本质上这里不是讲的不是 python,而是 dos 命令...
  • lanchunhui
  • lanchunhui
  • 2016-04-28 18:25:32
  • 9150

python中如何调用shell等外部的命令

python调用shell命令的方法有许多 1.1 os.system(command) 在一个子shell中运行command命令,并返回command命令执行完毕后的退出状态。这实际上...
  • u012474716
  • u012474716
  • 2017-05-02 10:27:05
  • 1349

python运行shell命令四种方法

这里介绍一下python执行shell命令的四种方法: 1、os模块中的os.system()这个函数来执行shell命令 1 2 3 ...
  • guogaoan
  • guogaoan
  • 2014-07-05 09:43:52
  • 3189

python学习之--调用shell脚本

python调用Shell脚本,有很多种方法,下面给出了三个python中执行shell命令的方法 第一种方案:os.system os.system返回脚本的退出状态码 现有一个shell脚本1.s...
  • viease
  • viease
  • 2015-07-10 15:56:06
  • 16293

Python3 执行Linux Bash命令

和之前C++执行Linux Bash命令 一样,Python依然支持system调用和popen()函数来执行linux bash命令。方法一:system调用#仅仅在一个子终端运行系统命令,而不能获...
  • xiangxianghehe
  • xiangxianghehe
  • 2017-08-19 10:59:58
  • 1309

Python脚本中执行shell命令

如下图,其中最后一个0是这个命令的返回值,为0表示命令执行成功; popen():想要获取命令执行的结果,但是没有命令的执行状态。 commands:可以很方便的取得命令的输出(包括标准和错误输出)和...
  • zm714981790
  • zm714981790
  • 2016-12-29 14:44:51
  • 5472

python调用shell命令

python调用shell命令 1.1   os.system(command)        在一个子shell中运行command命令,并返回command命令执行完毕后的退出状态。这...
  • n8765
  • n8765
  • 2015-12-28 18:16:57
  • 1034

一个有用函数:python调用shell命令

在安装lxml时遇到问题,认识了这个函数,觉得挺有用,记录如下:def run_command(cmd, *args): if not cmd: return '' ...
  • lonfee88
  • lonfee88
  • 2010-11-28 17:16:00
  • 4378
收藏助手
不良信息举报
您举报文章:Python调用shell命令的几种方法(在新进程中执行shell命令)
举报原因:
原因补充:

(最多只允许输入30个字)