python执行系统命令的方法

简介:

    做为系统工程师来说,经常会用到python脚本去调用一下系统命令,现把经常使用的集中调用方法总结如下:

一,os.system(command)

在一个子shell中运行command命令,并返回command命令执行完毕后的退出状态。这个函数执行命令的结果无法保存,只能显示在标准输出。但是,命令执行是否成功的退出状态可以通过变量得到,非0即为不正常。

例:
>>> os.system('ls /tmp')
hsperfdata_root  supervisor.sock  tmp_fifo
0
>>> code=os.system('ls /tmp')
hsperfdata_root  supervisor.sock  tmp_fifo
>>> print code
0


二,os.popen(command[, mode[, bufsize]])

打开一个与command进程之间的管道,函数的返回值是一个连接到管道的文件对象,故可以对文件做读写操作(由mode决定rw,mode默认是’r',)。bufsize指定了文件期望的buffer大小,0意味着不是用buffer,1意味着line buffered(行缓冲),负值意味着使用系统默认行为,正值意味着按设定的num值开辟buffer空间;一般终端相关的设备输出用行缓冲,对文件相关输出用全缓冲;默认情况下,buffer是全缓冲,加快了文件读取速度减少了上下文切换。如果mode为’r',可以使用此函数的返回值调用read()来获取command命令的执行结果。

例:

>>> f=os.popen('ls /tmp')            
>>> f.readlines()
['hsperfdata_root\n', 'supervisor.sock\n', 'tmp_fifo\n']


三,subprocess

第一种:

subprocess.call(["some_command","some_argument","another_argument_or_path"])

与os.system的功能相同。

第二种:

subprocess.Popen(command,shell=True)

已子进程的方式去执行命令,然后返回代表新进程的Popen对象。他可以与新建进程的输入/输出/错误管道联通,并可以获得新建进程执行的返回状态等。使用subprocess模块主要目的就是来替代之前的os,popen,commands等函数或模块。

例:

执行基本的系统命令,直接输出结果

>>> ret = subprocess.call('ls /tmp',shell=True)
hsperfdata_root  supervisor.sock  tmp_fifo

执行系统命令,但是捕捉输出

>>> f = subprocess.Popen('ls /tmp',shell=True,stdout=subprocess.PIPE)
>>> print f.stdout.readlines()
['hsperfdata_root\n', 'supervisor.sock\n', 'tmp_fifo\n']

创建2个子进程,通过管道把他们连接起来。一个进程的输出作为另一个进程的输入

>>> f = subprocess.Popen('ls -l',shell=True,stdout=subprocess.PIPE)
>>> p = subprocess.Popen('wc', shell=True, stdin=f.stdout, stdout=subprocess.PIPE) 
>>> print p.stdout.readlines()
['     73     652    4161\n']


四,commands

commands模块用于执行以字符串形式指定的简单系统命令,并将其输出以字符串形式返回,仅使用于unix系统。

第一种:

getoutput(cmd)

在shell中执行cmd,返回包含命令标准输出和标准错误流的字符串。

getstatusoutput(cmd)

与getoutput类似,差别在于返回的是二元组(status,output)

例:

>>> out=commands.getoutput('ls /tmp') 
>>> print out
hsperfdata_root
supervisor.sock
tmp_fifo

>>> status,out=commands.getstatusoutput('ls /tmp') 
>>> print status,out
0 hsperfdata_root
supervisor.sock
tmp_fifo











本文转自 leejia1989 51CTO博客,原文链接:http://blog.51cto.com/leejia/1439031,如需转载请自行联系原作者
目录
相关文章
|
1天前
|
Python
Python面向对象基础与魔法方法详解
Python面向对象基础与魔法方法详解
|
1天前
|
监控 安全 虚拟化
深入浅出Python沙箱越狱:原理、方法与防范
今天我们来聊一个有趣的话题 - Python沙箱越狱。在我们开始之前,先来搞清楚什么是Python沙箱吧。 简单来,Python沙箱就像是一个虚拟的"游乐场"。在这个游乐场里,你可以尽情地玩耍(运行Python代码),但是不能伤害到外面的世界(不能访问系统资源或执行危险操作)。这个"游乐场"有围栏(限制),有规则(安全策略),目的就是让你玩得开心,又不会搞出什么大乱子。
|
16小时前
|
Linux 编译器 C语言
Python的系统路径
Python的系统路径
5 0
|
1天前
|
索引 Python 容器
深入探索Python字符串:技巧、方法与实战
深入探索Python字符串:技巧、方法与实战
|
1天前
|
调度 Python
Python多线程学习优质方法分享
Python多线程学习优质方法分享
|
1天前
|
程序员 数据处理 Python
Python 中的主要循环结构和迭代方法
在 Python 编程中,循环结构是一种重要的控制流工具,用于重复执行代码块或遍历数据集合。Python 提供了多种循环结构和迭代方法,让程序员能够根据不同的需求选择最合适的方式来处理数据和逻辑。本文将介绍 Python 中的主要循环结构和迭代方法,并提供相应的示例代码。
|
2天前
|
机器学习/深度学习 数据采集 人工智能
Python 高级实战:基于自然语言处理的情感分析系统
**摘要:** 本文介绍了基于Python的情感分析系统,涵盖了从数据准备到模型构建的全过程。首先,讲解了如何安装Python及必需的NLP库,如nltk、sklearn、pandas和matplotlib。接着,通过抓取IMDb电影评论数据并进行预处理,构建情感分析模型。文中使用了VADER库进行基本的情感分类,并展示了如何使用`LogisticRegression`构建机器学习模型以提高分析精度。最后,提到了如何将模型部署为实时Web服务。本文旨在帮助读者提升在NLP和情感分析领域的实践技能。
9 0
|
2天前
|
分布式计算 API 开发者
编写高质量Python代码的方法
编写高质量Python代码的方法
15 0
|
Java Go Python
Python - 执行顺序、执行入口
Python - 执行顺序、执行入口
249 0
|
5天前
|
机器学习/深度学习 人工智能 前端开发
Python中的模块化编程
【6月更文挑战第17天】Python模块化编程与软件架构设计的关键在于拆分任务到独立模块,提高代码的可维护性、可重用性和可扩展性。例如,学生管理系统可分解为录入、查询和删除模块。MVC和MVVM架构模式有助于组织代码,而微服务和函数式编程将在未来发展中扮演重要角色。通过示例代码,读者能学习如何实现这些概念,提升项目开发效率和质量。
153 57

热门文章

最新文章