python程序中调用shell命令,是件很酷且常用的事情
今天来总结一下

 
1.使用os模块 的  system
        此函数会启动子进程,在子进程中执行command,并返回command命令执行完毕后的退出状态
如果command有执行内容,会在标准输出显示。这实际上是使用C标准库函数system()实现的。
      system方法会创建子进程运行外部程序,方法只返回外部程序的运行状态。这个方法比较适用于外部程序没有输出结果的情况
>>> import os
>>> os.system('ls')
1.py                   51.29.txt        dead.letter  error.txt      yue.csv
1.txt                  anaconda-ks.cfg  dengji.sh    kefuTongji.sh
0
>>> a=os.system('ls')
1.py                   51.29.txt        dead.letter  error.txt      yue.csv
1.txt                  anaconda-ks.cfg  dengji.sh    kefuTongji.sh
>>> print a
0
 
 

2.os模块的popen方法

        打开一个与command进程之间的管道。
这个函数的返回值是一个文件对象,可以读或者写(由mode决定,mode默认是’r')。如果mode为’r',可以使用此函数的返回值调用read()来获取command命令的执行结果。
       当需要得到外部程序的输出结果时,本方法非常有用,返回一个类文件对象,调用该对象的read()或readlines()方法可以读取输出内容。
>>> os.popen('ls')
<open file 'ls', mode 'r' at 0x7f365a5075d0>
 
>>> print os.popen('ls').read()
1.py
1.txt
 
>>>a=os.popen('ls').readlines()
>>>print a
['1.py\n', '1.txt\n', '2016_11_28_access_log\n', '51.29.txt\n', 'anaconda-ks.cfg\n']
 
 

3.commands模块的  getoutput 方法

      这种方法同popend的区别在于popen返回的是一个类文件对象,而本方法将外部程序的输出结果当作字符串返回,很多情况下用起来要更方便些。

主要方法:

*   commands.getstatusoutput(cmd)         返回(status, output)
*   commands.getoutput(cmd)                   只返回输出结果
*   commands.getstatus(file)                     返回ls -ld file的执行结果字符串,调用了getoutput,不建议

>>> import commands

>>> commands.getstatusoutput('ls')

(0, '1.py\n1.txt\n2016_11_28_access_log\n51.29.txt\nanaconda-ks.cfg\ndata.txt\ndead.letter\ndengji.sh\ndiskJK,sh')

>>> commands.getoutput('ls')

'1.py\n1.txt\n2016_11_28_access_log\n51.29.txt\nanaconda-ks.cfg'

 
>>> commands.getstatus('1.py')=ippi
'-rwxr-xr-x 1 root root 69 Jan 19 14:22 1.py'
 
 

4.模块subprocess

subprocess意在替代其他几个老的模块或者函数,
比如:os.system os.spawn*  os.popen*  popen2.* commands.*

       根据Python官方文档说明,subprocess模块用于取代上面这些模块。有一个用Python实现的并行ssh工具—mssh,代码很简短,不过很有意思,它在线程中调用subprocess启动子进程来干活
 
subprocess.Popen('脚本/shell', shell=True)        无阻塞、和主程序并行运行
subprocess.call('脚本/shell', shell=True)              必须等待命令执行完毕
 
>>> import subprocess

>>> subprocess.Popen("ls")
1.py                   anaconda-ks.cfg  diskJK,sh      yue.csv
<subprocess.Popen object at 0x7fda1a0fcc50>
 
>>> a=subprocess.Popen("ls")
1.py                   anaconda-ks.cfg  diskJK,sh      yue.csv
>>> print a
<subprocess.Popen object at 0x7fda1a0fcc90>

>>>subprocess.Popen('. xxx.sh', stdout = subprocess.PIPE, shell = True).stdout.read()
'1.py\n1.txt\n2016_11_28_access_log\n51.29.txt\n'
 
  1. p = subprocess.Popen("python stdTest.py",shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
  2. sout = p.stdout.readlines()
  3. serr = p.stderr.readlines()
  4. print sout
  5. print serr
 
 
 
>>> subprocess.call("ls")
1.py                   anaconda-ks.cfg  diskJK,sh      yue.csv
 
>>> a=subprocess.call("ls")
1.py                   anaconda-ks.cfg  diskJK,sh      yue.csv
>>> print a
0
 
 
>>> from subprocess import call
>>> call(["ls","-l"])
total 2972
-rwxr-xr-x 1 root root     220 Jan 17 22:33 1.sh
 
 
 
总结一下:
1.os.system            命令行可以输出运行内容,但只能返回运行状态
2.os.popen             返回一个类文件对象,可以从此文件读取输出内容
3.commands.get    既能返回输出内容,也能返回运行结果状态
4.subprocess          既能返回输出内容,也能返回运行结果状态

Python 调用 Shell命令的更多相关文章

  1. python 调用 shell 命令方法

    python调用shell命令方法 1.os.system(cmd) 缺点:不能获取返回值 2.os.popen(cmd) 要得到命令的输出内容,只需再调用下read()或readlines()等   ...

  2. python 调用shell命令三种方法

    #!/usr/bin/python是告诉操作系统执行这个脚本的时候,调用/usr/bin下的python解释器: #!/usr/bin/env python这种用法是为了防止操作系统用户没有将pyth ...

  3. python 调用 shell 命令

    记录 python 调用 shell 命令的方法 加载 os 模块, 使用 os 类 import os; os.system("ls /");

  4. 用Python调用Shell命令

    Python经常被称作“胶水语言”,因为它能够轻易地操作其他程序,轻易地包装使用其他语言编写的库,也当然可以用Python调用Shell命令. 用Python调用Shell命令有如下几种方式: 第一种 ...

  5. python 调用shell命令的方法

    在python程序中调用shell命令,是件很酷且常用的事情…… 1. os.system(command) 此函数会启动子进程,在子进程中执行command,并返回command命令执行完毕后的退出 ...

  6. python调用shell命令

    1.subprocess介绍 官方推荐 subprocess模块,os.system(command) 这个废弃了 亲测 os.system 使用sed需要进行字符转义,非常麻烦 python3 su ...

  7. Python调用shell命令常用方法

    Python调用shell指令 方法一.使用os模块的system方法:os.system(cmd),其返回值是shell指令运行后返回的状态码,int类型,0表示shell指令成功执行,256表示未 ...

  8. (转载)python调用shell命令之os 、commands、subprocess

    linux系统下进入python交互式环境: 一.os 模块 1.1.os模块的exec方法簇: python交互界面中: In [1]: import os In [2]: os.exec os.e ...

  9. python调用shell命令之三慷慨法

    preface: 忙于近期的任务,须要用到libsvm的一些命令.如在终端执行java svm_train train_file model_file. pythonsubset.py file tr ...

随机推荐

  1. 高校表白app使用体验

    在本次软件工程专业交流会中,有幸了解了很多学长学姐研究并且开发的软件,使我受益匪浅.其中最让我记忆犹新的还属一款名为高校表白app的软件.首先这款app的主要功能是为我们提供一个委婉的告白平台,我们可 ...

  2. C# 根据年月日计算周次

    //day:要判断的日期,WeekStart:1 周一为一周的开始, 2 周日为一周的开始 public static int WeekOfMonth(DateTime day, int WeekSt ...

  3. 跨源请求cors和jsonp

    0.产生跨域的原因 浏览器的同源策略 什么是浏览器的同源策略? src开发 ajax禁止 解决方法 jsonp 通过src绕过浏览器的同源策略 缺点:只发送GET请求 cors 通过设置相应头 分类 ...

  4. context:component-scan标签的诠释

    XML中配置context:component-scan时,spring会自动的扫描这个包下被这些注解标识的类@Component,@Service,@Controller,@Repository,同 ...

  5. QTP测试web时:打开ie浏览器进行录制但qtp录制脚本为空

    1. 关闭ie的保护模式:设置——internet选项——安全——取消勾选“启用保护模式” 这一步很关键,之前试过很多步骤,只有这个成功了. 修改后如果可行即可.如果不行再进行下面操作: 2.关闭杀毒 ...

  6. 我的C++开发工具链

    工欲善其事,必先利其器.想要干好活,顺手的工具是必不可少的.来分享下我的C++开发工具链. 平台:Windows 编译器:MSVC IDE:Visual Studio 版本控制:TortoiseGit ...

  7. JPA_映射关联关系

    一:单项多对一的关联关系 例如:订单和客户 1.新创建订单类 package com.atguigu.jpa.helloworld; import javax.persistence.Column; ...

  8. Docker在树莓派的安装与使用(Ubuntu Arm Server v19.10)

    最近由于冠状病毒疫情的原因,只能够和小朋友家里蹲.这几天把尘封已久的那个树莓派拿出来继续捣鼓.希望能够做一个异构的分布式系统框架,于是想把Docker也安装到树莓派上,以便后期做进一步的开发和实验. ...

  9. [校内训练19_09_10]sort

    题意 给一个非负整数序列,每次问能否异或上一个正整数使得所有的数单调不减.如果能,输出最小的x,否则输出-1.单点修改.多测.要求最多一个log. 思考 只要考虑相邻的两个数.找到这两个数最高的不同的 ...

  10. C语言创建文件夹

    问题需求:在程序中需要使用文件夹时,一般可以先在程序目录或某一路径下创建一个文件夹,然后使用该文件夹. 这种方法比较麻烦,需提前创建文件夹. 使用C语言创建文件夹的代码可以如下: #include & ...