Shu*_*tsu 3 python command-line bash scripts
我在 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
Run Code Online (Sandbox Code Playgroud)
您可以使用该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)
Run Code Online (Sandbox Code Playgroud)
command_1
是管道左侧的命令,在空格上拆分以制作subprocess.Popen
类所需的列表
command_2
是管道左侧的命令拆分类似于 command_1
first
是subprocess.Popen
类的对象,subprocess.Popen
执行command_1
并将其 STDOUT 发送到,PIPE
以便我们可以将其用作输入command_2
subprocess.call
将执行command_2
来自 STDOUT 的 STDINfirst
对于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)
Run Code Online (Sandbox Code Playgroud)
阅读关于 subprocess的官方文档以获得更多想法。