commands模块

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

1. commands.getoutput('shell command')

执行shell命令,返回结果(string类型)

 

  1.  
    >>> commands.getoutput('pwd')
  2.  
    '/home/oracle'

2. commands.getstatus('file')

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

 

  1.  
    >>> commands.getstatus('admin.tar')
  2.  
    '-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, 故返回结果包含标准输出和标准错误.

 

  1.  
    >>> commands.getstatusoutput('pwd')
  2.  
    (0, '/home/oracle')

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

 

  1.  
    import commands
  2.  
     
  3.  
    threshold = 10
  4.  
    flag = False
  5.  
     
  6.  
    title=commands.getoutput("df -h|head -1")
  7.  
     
  8.  
    '''
  9.  
    Check sda disk space usage like below format:
  10.  
    /dev/sda2 20G 2.3G 17G 13% /
  11.  
    /dev/sda6 20G 306M 19G 2% /var
  12.  
    /dev/sda3 49G 2.8G 44G 7% /home
  13.  
    /dev/sda5 49G 4.5G 42G 10% /opt
  14.  
    /dev/sda1 194M 12M 172M 7% /boot
  15.  
    '''
  16.  
     
  17.  
    chkDiskList=commands.getoutput("df -h|grep sda").split('\n')
  18.  
    usedPercents=commands.getoutput("df -h|grep sda|awk '{print $5}'|grep -Eo '[0-9]+'").split('\n')
  19.  
     
  20.  
    for i in range(0,len(usedPercents)):
  21.  
    if int(usedPercents[i]) >= threshold:
  22.  
    chkDiskList[i] += ' ----Caution!!! space usage >= ' + str(threshold)
  23.  
    flag = True
  24.  
     
  25.  
    '''
  26.  
    Check disk space usage like below format:
  27.  
    /dev/mapper/backup-backup_lv
  28.  
    751G 14G 699G 2% /backup
  29.  
    /dev/mapper/data-data_lv
  30.  
    751G 172G 540G 25% /data
  31.  
    '''
  32.  
     
  33.  
     
  34.  
    chkDiskList_2=commands.getoutput("df -h|grep -v sda|grep -v tmp|grep -v system").split('\n')
  35.  
    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')
  36.  
     
  37.  
    for i in range(0,len(usedPercents_2)):
  38.  
    if int(usedPercents_2[i]) >= threshold:
  39.  
    chkDiskList_2[i*2 + 1] += ' ----Caution!!! space usage >= ' + str(threshold)
  40.  
    flag = True
  41.  
     
  42.  
    if flag == True:
  43.  
    #combine tile, chkDiskList, chkDisklist_2
  44.  
    result = [title,]
  45.  
    result.extend(chkDiskList)
  46.  
    result.extend(chkDiskList_2)
  47.  
    for line in result:
  48.  
    print line

假设当前的磁盘使用率如下:

 

  1.  
    [oracle@lx200 ~/admin/python]$ df -h
  2.  
    Filesystem Size Used Avail Use% Mounted on
  3.  
    /dev/sda2 20G 2.3G 17G 13% /
  4.  
    /dev/sda6 20G 306M 19G 2% /var
  5.  
    /dev/sda3 49G 2.8G 44G 7% /home
  6.  
    /dev/sda5 49G 4.5G 42G 10% /opt
  7.  
    /dev/sda1 194M 12M 172M 7% /boot
  8.  
    tmpfs 18G 0 18G 0% /dev/shm
  9.  
    /dev/mapper/backup-backup_lv
  10.  
    751G 14G 699G 2% /backup
  11.  
    /dev/mapper/data-data_lv
  12.  
    751G 174G 539G 25% /data

执行该脚本后的结果如下:

 

  1.  
    Filesystem Size Used Avail Use% Mounted on
  2.  
    /dev/sda2 20G 2.3G 17G 13% / ----Caution!!! space usage >= 10
  3.  
    /dev/sda6 20G 306M 19G 2% /var
  4.  
    /dev/sda3 49G 2.8G 44G 7% /home
  5.  
    /dev/sda5 49G 4.5G 42G 10% /opt ----Caution!!! space usage >= 10
  6.  
    /dev/sda1 194M 12M 172M 7% /boot
  7.  
    /dev/mapper/backup-backup_lv
  8.  
    751G 14G 699G 2% /backup
  9.  
    /dev/mapper/data-data_lv
  10.  
    751G 174G 539G 25% /data ----Caution!!! space usage >= 10
  11.  

posted @ 2018-07-16 07:41  狼的本性  阅读(172)  评论(0编辑  收藏  举报