用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丢弃,不建议使用,它返回 ls -ld file 的结果(String)(返回结果太奇怪了,难怪被丢弃)
>>> commands.getstatus('admin.tar') '-rw-rw-r-- 1 oracle oracle 829440 Jan 29 10:36 admin.tar'
3. commands.getstatusoutput('shell command')
执行shell命令, 返回两个元素的元组tuple(status, result),status为int类型,result为string类型。
cmd的执行方式是{ cmd ; } 2>&1, 故返回结果包含标准输出和标准错误.
>>> commands.getstatusoutput('pwd') (0, '/home/oracle')
下面的一个脚本利用commands模块检测磁盘使用率,标识出大于10%的磁盘(百分比可根据实际情况调整,一般设为90%,本例为了更好的说明情况,设为10%):
import commands threshold = 10 flag = False title=commands.getoutput("df -h|head -1") ''' Check sda disk space usage like below format: /dev/sda2 20G 2.3G 17G 13% / /dev/sda6 20G 306M 19G 2% /var /dev/sda3 49G 2.8G 44G 7% /home /dev/sda5 49G 4.5G 42G 10% /opt /dev/sda1 194M 12M 172M 7% /boot ''' 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: /dev/mapper/backup-backup_lv 751G 14G 699G 2% /backup /dev/mapper/data-data_lv 751G 172G 540G 25% /data ''' 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
假设当前的磁盘使用率如下:
[oracle@lx200 ~/admin/python]$ df -h Filesystem Size Used Avail Use% Mounted on /dev/sda2 20G 2.3G 17G 13% / /dev/sda6 20G 306M 19G 2% /var /dev/sda3 49G 2.8G 44G 7% /home /dev/sda5 49G 4.5G 42G 10% /opt /dev/sda1 194M 12M 172M 7% /boot tmpfs 18G 0 18G 0% /dev/shm /dev/mapper/backup-backup_lv 751G 14G 699G 2% /backup /dev/mapper/data-data_lv 751G 174G 539G 25% /data
执行该脚本后的结果如下:
Filesystem Size Used Avail Use% Mounted on /dev/sda2 20G 2.3G 17G 13% / ----Caution!!! space usage >= 10 /dev/sda6 20G 306M 19G 2% /var /dev/sda3 49G 2.8G 44G 7% /home /dev/sda5 49G 4.5G 42G 10% /opt ----Caution!!! space usage >= 10 /dev/sda1 194M 12M 172M 7% /boot /dev/mapper/backup-backup_lv 751G 14G 699G 2% /backup /dev/mapper/data-data_lv 751G 174G 539G 25% /data ----Caution!!! space usage >= 10
python Commands模块 使用方法
要获得shell命令的输出只需要`cmd`就可以了,
需要得到命令执行的状态则需要判断$?的值, 在Python中有一个模块commands也很容易做到以上的效果.
看一下三个函数:
1). commands.getstatusoutput(cmd)
用os.popen()执行命令cmd, 然后返回两个元素的元组(status, result). cmd执行的方式是{ cmd ; } 2>&1, 这样返回结果里面就会包含标准输出和标准错误.
2). commands.getoutput(cmd)
只返回执行的结果, 忽略返回值.
3). commands.getstatus(file)
返回ls -ld file执行的结果.
看一下这些函数使用的例子:
>>> 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'
本文向大家介绍Node.js利用Net模块实现多人命令行聊天室的方法,包括了Node.js利用Net模块实现多人命令行聊天室的方法的使用技巧和注意事项,需要的朋友参考一下 这篇文章介绍的是Node.js利用Net模块实现命令行式的多人聊天室,下面话不多说,来看看详细的介绍吧。 1、net模块基本API 要使用Node.js的net模块实现一个命令行聊天室,就必须先了解NET模块的API使用。NET
Rexx的最大优势之一是能够创建可重用的脚本。 现在,在组织中,具有可重复使用的脚本是一个很大的附加值,可以节省执行常见重复性任务的时间。 例如,IT组织中的技术团队可能需要具有执行常见日常任务的脚本。 这些任务可以包括与操作系统交互。 然后可以对这些脚本进行编程以处理错误的返回码或错误。 Rexx提供了许多可用于执行此类重复任务的系统命令。 我们来看看Rexx中可用的一些系统命令。 dir 这是
本章将向您介绍JDB的基本命令。 启动会话后,这些命令用于调试程序。 以下是用于调试的命令列表。 名称 描述 help or ? 最重要的JDB命令; 它会显示一个包含简要说明的已识别命令列表。 run 启动JDB并设置必要的断点后,可以使用此命令开始执行并调试应用程序。 cont 在断点,异常或步骤之后继续执行已调试的应用程序。 print 显示Java对象和原始值。 dump 对于原始值,此命
Python的3.0版本,常被称为Python 3000,或简称Py3k。相对于Python的早期版本,这是一个较大的升级。 为了不带入过多的累赘,Python 3.0在设计的时候没有考虑向下相容。 许多针对早期Python版本设计的程式都无法在Python 3.0上正常执行。 为了照顾现有程式,Python 2.6作为一个过渡版本,基本使用了Python 2.x的语法和库,同时考虑了向Pyt
Python的3.0版本,常被称为Python 3000,或简称Py3k。相对于Python的早期版本,这是一个较大的升级。 为了不带入过多的累赘,Python 3.0在设计的时候没有考虑向下相容。 许多针对早期Python版本设计的程式都无法在Python 3.0上正常执行。 为了照顾现有程式,Python 2.6作为一个过渡版本,基本使用了Python 2.x的语法和库,同时考虑了向Pyt
下列页面给出了PX4模块、驱动和命令的相关文档。这些文档描述了所提供的功能,高级实现概述以及如何使用命令行界面。 Note 这是从源代码自动生成的,并且包含最新的模块文档。 这不是一个完整的列表,并且NuttX提供了一些额外的命令(例如free)。 在控制台使用help来获取所有可用命令的列表,在大多数情况下,command help将给出用法说明。 因为这份文档是从源代码生成的,所以有任何错误的