将 BASH 转换为 Python (v2.6)

将 BASH 转换为 Python (v2.6)

我在 bash 中有这段代码,但不知道如何翻译“ps -C.....”和“ps -eo....”中的行,有什么帮助可以告诉我如何编写这些行吗?

if [ "$SwapUsedActivity" == "true" ]
then 
    echo "WARNING: Potential Swapping happening please check for increasing swap usage"
    echo "INFO: checking kswapd number of process and cputime, check for TIME colume for how busy kswapd was"
    ps -C kswapd0 -C kswapd1 -C kswapd2 -C kswapd3 -C kswapd4  -o pid,ppid,stime,etime,time,pcpu,args
else
    echo "INFO: High swap space usage detected, not a potential issue but check activity"
fi
else
    echo "INFO: Swap usage within the limits"
fi
if [ $AvgAnnonymousMemoryused -gt 20 ]
then 
    echo "INFO: High residential memory usage detected, this may not be an issue, please check top memory consuming processes"
    echo "INFO: Printing top 10 memory consuming processes"
    ps -eo pid,ppid,user,rss,comm --sort=rss | tail -10 
fi

答案1

您可以使用该subprocess模块:

#!/usr/bin/env python2
import subprocess
command_1 = 'ps -eo pid,ppid,user,rss,comm --sort=rss'.split()
command_2 = 'tail -10'.split()
first = subprocess.Popen(command_1, stdout=subprocess.PIPE)
subprocess.call(command_2, stdin=first.stdout)
  • command_1是管道左侧的命令,按空格分隔以生成subprocess.Popen类所需的列表

  • command_2管道左侧的命令是否类似于command_1

  • first是类的一个对象subprocess.Popensubprocess.Popen执行command_1并将其 STDOUT 发送到,PIPE以便我们可以将其用作输入command_2

  • subprocess.call将执行command_2其 STDIN 来自的first

对于ps -C kswapd0 -C kswapd1 -C kswapd2 -C kswapd3 -C kswapd4 -o pid,ppid,stime,etime,time,pcpu,args命令你可以执行以下操作:

#!/usr/bin/env python2
import subprocess
command = 'ps -C kswapd0 -C kswapd1 -C kswapd2 -C kswapd3 -C kswapd4  -o pid,ppid,stime,etime,time,pcpu,args'.split()
subprocess.call(command)

阅读子流程的官方文档获得更多想法。

答案2

我会用类似psutil以编程方式获取数据。

这需要花一点时间来学习,所以更快、更激进的替代方案是通过子 shell 样式结构运行命令来自 Python。

import commands
exit_code, output = commands.getstatusoutput('ps -eo pid,ppid,user,rss,comm --sort=rss')
print '\n'.join(output.split('\n')[-10:])

我已经将其移到tail纯 Python 中,只是为了好玩。

相关内容