博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Python2.x] 利用commands模块执行Linux shell命令
阅读量:6345 次
发布时间:2019-06-22

本文共 3216 字,大约阅读时间需要 10 分钟。

用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 commandsthreshold = 10flag = Falsetitle=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 = Trueif 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 -hFilesystem            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

转载于:https://www.cnblogs.com/alan-babyblog/p/5260228.html

你可能感兴趣的文章
我的友情链接
查看>>
无线和有线路由哪种性能更好
查看>>
Dwr3.0纯注解(纯Java Code配置)配置与应用浅析三之后端反向调用前端
查看>>
Ubuntu下安装遨游浏览器
查看>>
自定义Linux service脚本
查看>>
微信开发之发红包
查看>>
一键lnmp脚本&&php扩展模块安装(适用于CENTOS6.X系列)
查看>>
二维观察---文字的裁剪
查看>>
矩形覆盖
查看>>
ICMP
查看>>
界面设计模式(第2版)(全彩)
查看>>
解决VMware Workstation错误:未能锁定文件
查看>>
CentOS6 手动编译升级 gcc
查看>>
memcached的安装与开启脚本
查看>>
Linux与Window字符集~~伤不起的幽灵空白符
查看>>
zabbix 邮件报警 -- sendmail
查看>>
JavaScript异步编程
查看>>
tcpdump用法小记
查看>>
MySQL基础安全注意细节
查看>>
Oracle随机函数—dbms_random
查看>>