前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python执行系统命令的方法

python执行系统命令的方法

作者头像
py3study
发布2020-01-07 16:27:48
3.8K0
发布2020-01-07 16:27:48
举报
文章被收录于专栏:python3python3

    做为系统工程师来说,经常会用到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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-09-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
命令行工具
腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档