Linux下Python脚本的编写(二)

Source

今天试着把两个shell小脚本转化成Python版本
一. 脚本1 判断所接的nvme 在哪个CPU上

#!/bin/bash
lscpu |grep -i node
for nvme in `nvme list|sed 1,2d|awk '{print $1}'|awk -F "/" '{print $NF}'`
do
        echo $nvme
        busid=$(readlink -f /sys/block/$nvme |cut -d '/' -f 6)
        echo "busid = $busid"
        lspci -s $busid -vv |grep -i node
        echo "======================================"
done

运行结果如下:
在这里插入图片描述
下面用Python的OS模块转化一下,代码如下:

import os
cpu=os.popen("lscpu|grep -i node").read()
print (cpu.strip())
nvme=os.popen("nvme list|grep -i nvme|awk {'print $1'}|awk -F '/' {'print $NF'}").read()
for ssd in nvme.split():
    print (ssd)
    busid=os.popen("readlink -f /sys/block/" + ssd + " |cut -d '/' -f 6").read()
    print ('busid = ',busid.strip())
    busip=busid.strip()
    numa=os.popen("lspci  -s "+busip+" -vv |grep -i node").read()
    print (numa.strip())
    print('=====================')

运行结果如下:
在这里插入图片描述
二. 判断OS的小脚本:

#!/bin/bash
bootdisk=`df -h | awk '{print $1}' | grep -iE "/dev/sd" | sed 's/[0-9]//g' |sort -u|awk -F "/" '{print $NF}'`
if  test -z "$bootdisk"
then
        bootdisk=`df -h | awk '{print $1}' | grep -iE "/dev/nvme" | sed 's/p[0-9]//g' |sort -u|awk -F "/" '{print $NF}'`
        echo "os disk is $bootdisk"
else
        echo "os disk is $bootdisk"
fi

运行结果如下:
在这里插入图片描述
转化成Python,代码如下:

import os
bootdisk=os.popen("df -h | awk '{print $1}' | grep -iE '/dev/sd' | sed 's/[0-9]//g' |sort -u|awk -F '/' '{print $NF}' ").read()
#print bootdisk.strip()
if len(bootdisk) == 0:
          bootdisk=os.popen("df -h | awk '{print $1}' | grep -iE '/dev/nvme' | sed 's/p[0-9]//g' |sort -u|awk -F '/' '{print $NF}'").read()
          print ('os disk is ', bootdisk.strip())
else:
          print ('os disk is ', bootdisk.strip())

运行结果如下:
在这里插入图片描述
总结:其实就是借用OS模块的popen函数来调用Linux指令,不过仍有几点需要注意
1 Python2和Python有很多格式不同
2 调用指令加变量的时候 需要拼接,不能直接调用
3 调用命令的时候是不识别" "的,需要转化为’ ',比如 awk -F “/” ‘{print $NF}’ 写成awk -F ‘/’ ‘{print $NF}’
4 用popen读取指令的时候,可能会带些空格或者换行,需要去掉这些,Python中有很多方法,比如split(),strip()等等
5 有些很长的命令,还是用shell写脚本方便,处理一些数据(表格,画图)时,用Python更简单一点。可以用Python调用shell,也可以用shell调用Python。不过在服务器测试或者SSD产品测试这个圈子,大部分是两者混用的