1. os.system

In [32]: run = os.system("date")
Thu Jan 28 09:41:25 CST 2016
In [33]: run
Out[33]: 0

只能得到返回值,无法得到输出。

2. os.popen

In [35]: run = os.popen("date")
In [36]: run.read
Out[36]: <function read>
In [37]: run.read()
Out[37]: 'Thu Jan 28 09:43:14 CST 2016\n'

只能得到输出,无法得到返回值。

3. commands模块

In [39]: run = commands.getstatusoutput("date")
In [40]: run
Out[40]: (0, 'Thu Jan 28 09:44:44 CST 2016')

返回一个数组。

4. subprocess模块

4.1 call

In [42]: run = subprocess.call(["uname","-a"], shell=True)
Linux
In [43]: run
Out[43]: 0

直接输出结果,将返回值赋值给变量,类似os.system

4.2 Popen

In [44]: run = subprocess.Popen("uname -a", shell=True,stdout=subprocess.PIPE)
In [48]: run.stdout.read()
Out[48]: 'Linux test-sun207 3.10.0-229.el7.x86_64 #1 SMP Fri Mar 6 11:36:42 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux\n'
In [49]: run.wait()
Out[49]: 0

注意: 当执行命令的参数或者返回中包含了中文文字,那么建议使用subprocess,如果使用os.popen则会出现错误。

5. sh模块

安装:pip install sh

In [62]: from sh import ifconfig
In [63]: run = sh.ifconfig
In [64]: run
Out[64]: <Command '/usr/sbin/ifconfig'>
In [65]: run()
Out[65]:
ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.207 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::20c:29ff:fe71:888 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:71:08:88 txqueuelen 1000 (Ethernet)
RX packets 95617464 bytes 8518940518 (7.9 GiB)
RX errors 0 dropped 7078520 overruns 0 frame 0
TX packets 1175268 bytes 172715015 (164.7 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 0 (Local Loopback)
RX packets 191 bytes 58512 (57.1 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 191 bytes 58512 (57.1 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
In [67]: run.bake()
Out[67]: <Command '/usr/sbin/ifconfig'>
In [68]: run('lo')
Out[68]:
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 0 (Local Loopback)
RX packets 191 bytes 58512 (57.1 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 191 bytes 58512 (57.1 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

执行脚本:

import sh
run = sh.Command("/home/amoffat/run.sh") # Absolute path
run()

多个参数:

from sh import tar
tar("cvf", "/tmp/test.tar", "/my/home/directory")

关键字参数:

# resolves to "curl http://duckduckgo.com/ -o page.html --silent"
curl("http://duckduckgo.com/", o="page.html", silent=True)
# or if you prefer not to use keyword arguments, this does the same thing:
curl("http://duckduckgo.com/", "-o", "page.html", "--silent")
# resolves to "adduser amoffat --system --shell=/bin/bash --no-create-home"
adduser("amoffat", system=True, shell="/bin/bash", no_create_home=True)
# or
adduser("amoffat", "--system", "--shell", "/bin/bash", "--no-create-home")

返回值:

output = ls("/")
print(output.exit_code) # should be 0
#捕获异常:
try: print(ls("/some/non-existant/folder"))
except ErrorReturnCode_2:
print("folder doesn't exist!")
create_the_folder()
except ErrorReturnCode:
print("unknown error")
exit(1)

###:

In [92]: sh.ls(sh.glob('*.txt'))
Out[92]: requirements.txt

tail:

In [93]: for line in sh.tail("-f", "requirements.txt", _iter=True):
....: print line #实现其他更好玩的功能
....:
requests==2.9.0
six==1.10.0
slip==0.4.0
#callback实现:
def process_output(line):
print(line)
p = tail("-f", "/var/log/some_log_file.log", _out=process_output)
p.wait()

py执行系统命令的更多相关文章

  1. Pyhton 学习总结 20 :执行系统命令

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

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

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

  3. Python中执行系统命令常见的几种方法--转载

    Python中执行系统命令常见的几种方法 Python中执行系统命令常见的几种方法有: (1)os.system # 仅仅在一个子终端运行系统命令,而不能获取命令执行后的返回信息 # 如果再命令行下执 ...

  4. Python执行系统命令:使用subprocess的Popen函数

    使用subprocess的Popen函数执行系统命令 参考: http://blog.sina.com.cn/s/blog_8f01450601017dlr.html http://blog.csdn ...

  5. 转 Python执行系统命令的方法

    传送门 Python执行系统命令的方法 http://www.linux-field.com/?p=15 Python中执行系统命令常见方法有两种: 两者均需 import os (1) os.sys ...

  6. python 执行系统命令模块比较

    python 执行系统命令模块比较 1.os.system模块 仅仅在子终端运行命令,返回状态码,0为成功,其他为失败,但是不返回执行结果 如果再命令行下执行,结果直接打印出来 >>> ...

  7. java中执行系统命令

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

  8. Java 执行系统命令

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

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

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

随机推荐

  1. CSS display:inline-block的元素特点:

    将对象呈递为内联对象,但是对象的内容作为块对象呈递.旁边的内联对象会被呈递在同一行内,允许空格. 在CSS中,块级对象元素会单独占一行显示,多个block元素会各自新起一行,并且可以设置width,h ...

  2. 洛谷-乘积最大-NOIP2000提高组复赛

    题目描述 Description 今年是国际数学联盟确定的“2000――世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年.在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你 ...

  3. Python基础(十)-模块

    模块初识 一般把不同功能代码放到不同py文件,一个py文件就是一个模块 三种模块库: 1.Python标准库 2.第三方库 3.自定义库 导入模块:import 库名 (Python解释器只认识执行文 ...

  4. clone远程代码及push

    clone远程代码1. git bash进入 git文件夹2. 从远程直接clone: git clone root@109.110.100.56:/usr/src/git-2.1.2/data/gi ...

  5. 移动端audio自动播放问题

    中秋临近,心血来潮想做个手机端贺卡,以前接触的移动端较少,虽然是个简单的贺卡,其实也蛮多坑的,简略说一下在制作贺卡的过程遇到的坑: 一:移动端的屏幕大小不能算作body的大小,因为手机浏览器头部都有网 ...

  6. Nopi Excel导入

    http://download.csdn.net/detail/diaodiaop/7611721 using System.Collections.Generic; using System.Dat ...

  7. sql server 2008 R2 压缩备份数据库

    今天需要把一个省外项目的数据库从服务器上备份.拷贝到本机(跨地域传输数据库备份文件). 连上VPN,通过远程桌面连接,连接上服务器,发现数据库文件已经有20G以上大小了. 文件太大,公司网络也不稳定, ...

  8. incomplete type is not allowed

    keil环境下,报错#70: incomplete type is not allowed,解决 mqtt_conf.h 定义了一个结构体 mqtt_buffer.h #include <std ...

  9. Multi-Objective Data Placement for Multi-Cloud Socially Aware Services---INFOCOM 2014

    [标题] [作者] [来源] [对本文评价] [why] 存在的问题 [how] [不足] assumption in future work [相关方法或论文] [重点提示] [其它]

  10. C语言学习 数独游戏

    摘要:花了1周多时间学习了C语言,开始练手写解数独游戏的程序. C语言学习 数独游戏 作者:乌龙哈里 时间:2015-11-22 平台:Window7 64bit,TCC 0.9.26(x86-64 ...