在Python中执行系统命令有os.system()、os.popen()、commands.getstatusoutput()、subprocess.Popen等

    1、os.system()

Python中关于os.system的描述:

>>> import os
>>> help(os.system)
system(command) -> exit_status
Execute the command (a string) in a subshell.

os.system()的命令执行是在子shell中执行,返回的是执行的退出状态码

>>> import os
>>> returnCode = os.system('adb devices')
List of devices attached
>>> print returnCode
0
>>> print open('C://temp.txt', 'r').readlines() ['List of devices attached \n', '\n']

2、os.popen()

Python官方文档关于os.popen的描述

<SPAN style="FONT-FAMILY: 宋体; FONT-SIZE: 15px">os.popen(command[, mode[, bufsize]])
Open a pipe to or from command. The return value is an open file object connected to the pipe, which can be read or written depending on whether mode is 'r' (default) or 'w'. The bufsize argument has the same meaning as the corresponding argument to the built-in open() function. The exit status of the command (encoded in the format specified for wait()) is available as the return value of the close() method of the file object, except that when the exit status is zero (termination without errors), None is returned. Availability: Unix, Windows. Deprecated since version 2.6: This function is obsolete. Use the subprocess module. Check especially the Replacing Older Functions with the subprocess Module section. Changed in version 2.0: This function worked unreliably under Windows in earlier versions of Python. This was due to the use of the _popen() function from the libraries provided with Windows. Newer versions of Python do not use the broken implementation from the Windows libraries.</SPAN>

使用管道执行命令,“返回值”是一个打开的文件对象,该文件对象里面是系统命令的“输出”。对其进行读取 read() 的操作可以看到执行的输出。

>>> import os
>>> returnCode = os.popen('adb devices')
>>> print returnCode
<open file 'adb devices', mode 'r' at 0x00B99C80>
>>> print returnCode.read()
List of devices attached

3、commands.getstatusoutput()

可以获得到返回值和输出,非常好用。

(status, output) = commands.getstatusoutput('cat /proc/cpuinfo')
print status, output
>>> import commands
>>> commands.getstatusoutput('ls /bin/ls')
(0, '/bin/ls')
>>> commands.getstatusoutput('cat /bin/junk')
(256, 'cat: /bin/junk: No such file or directory')
>>> commands.getstatusoutput('/bin/junk')
(256, 'sh: /bin/junk: not found')
>>> commands.getoutput('ls /bin/ls')
'/bin/ls'
>>> commands.getstatus('/bin/ls')
'-rwxr-xr-x 1 root 13352 Oct 14 1994 /bin/ls'

4、subprocess.Popen

Python官方文档关于subprocess的描述

The subprocess module allows you to spawn new processes, connect to their input/output/error pipes, and obtain their return codes. This module intends to replace several other, older modules and functions, such as: 

os.system
os.spawn*
os.popen*
popen2.*

subprocess.call代替os.system

>>> import subprocess
>>> returnCode = subprocess.call('adb devices')
List of devices attached >>> print returnCode
0
>>>

subprocess.check_output代替os.popen

>>> import subprocess
>>> returnCode = subprocess.check_output('adb devices')
>>> print returnCode
List of devices attached

subprocess.Popen使用

stdout

>>> import subprocess
>>> sp = subprocess.Popen('adb devices', shell=True, stdout=subprocess.PIPE)
>>> print sp
<subprocess.Popen object at 0x00BB68F0>
>>> print sp.stdout.read()
List of devices attached
#!/usr/bin/env python
# -*- coding: utf-8 -*- a = int(raw_input())
b = int(raw_input()) print 'a + b = ', a+b
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import subprocess
p =subprocess.Popen('python C://plus.py', shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
p.stdin.write('4\n')
p.stdin.write('5\n')
print p.stdout.readline()

PS:

1、test.py中,'python C://plus.py'里的python是必须的,参见:http://blog.csdn.net/jq0123/article/details/7448589

2、test.py中,p.stdin.write('4\n')里的“\n”是必须的

Pyhton 学习总结 20 :执行系统命令的更多相关文章

  1. golang学习笔记20 一道考察对并发多协程操作一个共享变量的面试题

    golang学习笔记20 一道考察对并发多协程操作一个共享变量的面试题 下面这个程序运行的能num结果是什么? package main import ( "fmt" " ...

  2. java中执行系统命令

    java程序中执行系统命令猛击下面的链接看看你就知道怎么用了 http://blog.csdn.net/a19881029/article/details/8063758 http://wuhongy ...

  3. Java 执行系统命令

    在Java中执行系统命令,主要是使用ProcessBuilder和Runtime.getRuntime().exec().而在这里主要是介绍两种方法的使用. 使用情景是在linux系统中,使用menc ...

  4. Python执行系统命令的方法 os.system(),os.popen(),commands

    os.popen():用python执行shell的命令,并且返回了结果,括号中是写shell命令 Python执行系统命令的方法: https://my.oschina.net/renwofei42 ...

  5. 值得 Web 开发人员学习的20个 jQuery 实例教程

    这篇文章挑选了20个优秀的 jQuery 实例教程,这些 jQuery 教程将帮助你把你的网站提升到一个更高的水平.其中,既有网站中常用功能的的解决方案,也有极具吸引力的亮点功能的实现方法,相信通过对 ...

  6. python基础之使用os.system来执行系统命令

    今天我们来尝试使用python 的os.system来执行系统命令 可以使用如下方法: import osprint os.system('ping www.baidu.com') 输出的结果是:64 ...

  7. Python执行系统命令的方法

    Python中执行系统命令常见方法有两种: 两者均需 import os (1) os.system # 仅仅在一个子终端运行系统命令,而不能获取命令执行后的返回信息 system(command) ...

  8. Ext.Net学习笔记20:Ext.Net FormPanel 复杂用法

    Ext.Net学习笔记20:Ext.Net FormPanel 复杂用法 在上一篇笔记中我们介绍了Ext.Net的简单用法,并创建了一个简单的登录表单.今天我们将看一下如何更好是使用FormPanel ...

  9. php非阻塞执行系统命令

    大家都知道php调用系统命令常用的主要有以下几种方法: 如exec(), system(), passthru(), shell_exec() 这几个函数的用法在此不做说明,有需要的请查阅php相关手 ...

随机推荐

  1. C语言break和continue

    break和continue C语言中有有两种结束循环的关键字:break和continue #include <stdio.h> #include <stdlib.h> in ...

  2. python基础学习——第二天

    一.python种类 1.1 Cpython python官方版本,使用c语言实现,运行机制:先编译,py(源码文件)->pyc(字节码文件),最终执行时先将字节码转换成机器码,然后交给cpu执 ...

  3. 一个资深iOS开发者对于React Native的看法

    一个资深iOS开发者对于React Native的看法 当我第一次尝试ReactNative的时候,我觉得这只是网页开发者涉足原生移动应用领域的歪门邪道.   我认为一个js开发者可以使用javasc ...

  4. ./*** > /dev/null 2>&1

    转载:http://dongwei.iteye.com/blog/322702 shell中可能经常能看到:>/dev/null 2>&1 命令的结果可以通过%>的形式来定义 ...

  5. java: cairo-misc.c:380: _cairo_operator_bounded_by_source: Assertion `NOT_REACHED' failed.

    出错原因 该问题会在Centos6.6及更高版本出现.也会在其他版本中出现. 解决方案 禁用carioGraphics > Add -Dorg.eclipse.swt.internal.gtk. ...

  6. python 获得当前路径

    先要装载 os模块: import os print os.getcwd() 或者 print os.path.abspath(os.curdir) print os.path.abspath('.' ...

  7. :nth-child(an+b)

    语法: :nth-child(an+b)为什么选择它,因为我认为,这个选择器是最多学问的一个了.很可惜,据我所测,目前能较好地支持她的只有Opera9+和Safari3+. 描述: 伪类:nth-ch ...

  8. EmguCV 轮廓分析函数汇总

    一.cvApproxPoly 使用多边形逼近一个轮廓,使得顶点数目变少.算法先从轮廓选择2个最远的点,然后将2个连成一个线段,然后再查找轮廓上到线段距离最远的点,添加到逼近后的新轮廓.算法反复迭代,不 ...

  9. requirejs解决异步模块加载方案

    他首先会遍历enableRegistry取出其中定义的模块,并且将没有加载成功的模块标识注入noLoads数组,如果过期了这里就会报错 如果上述没问题还会做循环依赖的判断,主要逻辑在breakCycl ...

  10. Masonry学习分享

    不完整目录 •UIScrollView 应用Masonry的正确用法 •tableHeaderView使用Masonry •同向文字显示优先级 1.基础篇 1.1基础使用 1.1.1运行效果 1.1. ...