python之commands模块

commands模块

用于执行Linux shell命令,要获得shell命令的输出只需要在后面参数写入(‘命令‘)就可以了。

需要得到命令执行的状态则需要判断$?的值, 在Python中有一个模块commands也很容易做到以上的效果。

看一下三个函数:
1). commands.getstatusoutput(命令)

执行shell命令, 返回两个元素的元组tuple(status, result),status为int类型,result为string类型。

cmd命令的执行方式是{ cmd ; } 2>&1, 故返回结果包含标准输出和标准错误.

>>> import commands

>>> commands.getstatusoutput(‘ls /bin/ls‘)

(0, ‘/bin/ls‘)

>>> commands.getstatusoutput(‘pwd‘)

(0, ‘/home/test‘)

>>> commands.getstatusoutput(‘cat /bin/junk‘)

(256, ‘cat: /bin/junk: No such file or directory‘)

>>> commands.getstatusoutput(‘/bin/junk‘)

(256, ‘sh: /bin/junk: not found‘)

2). commands.getoutput(cmd)
只返回执行的结果, 忽略返回值.

>>> commands.getoutput(‘ls /bin/ls‘)

‘/bin/ls‘

3). commands.getstatus(file) #现已被弃用
返回ls -ld file执行的结果.

>>> commands.getstatus(‘/bin/ls‘)    #该函数已被python丢弃,不建议使用,它返回 ls -ld file 的结果(String)(返回结果太奇怪了,难怪被丢弃)

‘-rwxr-xr-x 1 root 13352 Oct 14 1994 /bin/ls‘

例 1 :

获取系统最大文件描述符

#!/usr/bin/python

import os,sys,commands

_open_file=65533

try:

getulimit=commands.getstatusoutput(‘source /etc/profile;ulimit -n‘)

except Exception,e:

pass

if getulimit[0]==0:

host_open_file=int(getulimit[1])

if host_open_file = _open_file:

print "max_open_file is ok"

例 2 :

下面的一个脚本利用commands模块检测磁盘使用率,标识出大于10%的磁盘(百分比可根据实际情况调整,一般设为90%,本例为了更好的说明情况,设为10%):

#!/usr/bin/python

import commands

threshold = 10

flag = False

title=commands.getoutput("df -h|head -1")

‘‘‘

Check sda disk space usage like below format

‘‘‘

chkDiskList=commands.getoutput("df -h|grep sda").split(‘\n‘)

usedPercents=commands.getoutput("df -h|grep sda|awk ‘{print $5}‘|grep -Eo ‘[0-9]+‘").split(‘\n‘)

for i in range(0,len(usedPercents)):

if int(usedPercents[i]) >= threshold:

chkDiskList[i] += ‘    ----Caution!!! space usage >= ‘ + str(threshold)

flag = True

‘‘‘

Check disk space usage like below format:

‘‘‘

chkDiskList_2=commands.getoutput("df -h|grep -v sda|grep -v tmp|grep -v system").split(‘\n‘)

usedPercents_2=commands.getoutput("df -h|grep -v map|grep -v sda|grep -v tmp|grep -v system|awk ‘{print $4}‘|grep -Eo ‘[0-9]+‘").split(‘\n‘)

for i in range(0,len(usedPercents_2)):

if int(usedPercents_2[i]) >= threshold:

chkDiskList_2[i*2 + 1] += ‘    ----Caution!!! space usage >= ‘ + str(threshold)

flag = True

if flag == True:

#combine tile, chkDiskList, chkDisklist_2

result = [title,]

result.extend(chkDiskList)

result.extend(chkDiskList_2)

for line in result:

print line

时间: 2024-12-29 12:38:55

python之commands模块的相关文章

[Python] 利用commands模块执行Linux shell命令

用Python写运维脚本时,经常需要执行linux shell的命令,Python中的commands模块专门用于调用Linux shell命令,并返回状态和结果,下面是commands模块的3个主要函数: 1. commands.getoutput('shell command') 执行shell命令,返回结果(string类型) >>> commands.getoutput('pwd') '/home/oracle' 2. commands.getstatus('file') 该函数

python中的commands模块,执行出错:'{' 不是内部或外部命令,也不是可运行的程序 或批处理文件。

最近发现了python的commands模块,查看了下源码,使用的popen封装的,形成三个函数getstatus(), getoutput(), getstatusoutput() 源码如下: def getstatus(file): """Return output of "ls -ld <file>" in a string.""" import warnings warnings.warn("co

Python的logging模块、os模块、commands模块与sys模块

一.logging模块 import logging logging.debug('This is debug message') logging.info('This is info message') logging.warning('This is warning message') 屏幕上打印: WARNING:root:This is warning message 默认情况下,logging将日志打印到屏幕,日志级别为WARNING: 日志级别大小关系为:CRITICAL > ERR

python 基础 7.5 commands 模块

一. commands 模块 1.commands 模块只使用与linxu 的shell 模式下 在我们平时码字时,经常需要调用系统脚本或者系统命令来解决很多问题,接下来,我们就介绍给大家一个很好用的模块commands,可以通过python 调用系统命令,调用系统命令commands 模块提供了三种解决方法,cmd 代表系统命令 1>commands.getoutput(cmd) 只返回执行 shell 命令结果: eg1: [[email protected] pythonscripts]#

python中的commands模块

commands模块用于调用shell命令 有3中方法: commands.getstatus()   返回执行状态 commands.getoutput()   返回执行结果 commands.getstatusoutput()  返回一个元组,执行状态和执行结果 其他执行shell命令的方法还有: 1.os.system(cmd) 2.os.popen(cmd)

python标准库介绍——34 commands 模块详解

==commands 模块== (只用于 Unix) ``commands`` 模块包含一些用于执行外部命令的函数. [Example 3-7 #eg-3-7] 展示了这个模块. ====Example 3-7. 使用 commands 模块====[eg-3-7] ``` File: commands-example-1.py import commands stat, output = commands.getstatusoutput("ls -lR") print "s

[ python编程 ] subprocess模块学习总结

转载:http://www.jb51.net/article/48086.htm 从Python 2.4开始,Python引入subprocess模块来管理子进程,以取代一些旧模块的方法:如 os.system.os.spawn*.os.popen*.popen2.*.commands.*不但可以调用外部的命令作为子进程,而且可以连接到子进程的input/output/error管道,获取相关的返回信息. 一.subprocess以及常用的封装函数    运行python的时候,我们都是在创建并

python的subprocess模块

从Python 2.4开始,Python引入subprocess模块来管理子进程,以取代一些旧模块的方法:如 os.system.os.spawn*.os.popen*.popen2.*.commands.*不但可以调用外部的命令作为子进程,而且可以连接到子进程的input/output/error管道,获取相关的返回信息 一.subprocess以及常用的封装函数运行python的时候,我们都是在创建并运行一个进程.像Linux进程那样,一个进程可以fork一个子进程,并让这个子进程exec另

Python,subprocess模块(补充)

1.subprocess模块,前戏 res = os.system('dir') 打印到屏幕,res为0或非0 os.popen('dir') 返回一个内存对象,相当于文件流 a = os.popen('dir').read() a中就存的是执行结果输出了 Python2.7 commands模块 commands.getstatusoutput('dir')返回元祖,第一个元素为状态0为成功,第二个为结果 windows上不好用,只是Linux好用 subprocess模块,替换os.syst