J'ai ce code dans bash et je ne sais pas comment traduire les lignes avec 'ps -C .....' et 'ps -eo ....' aucune aide pour écrire ces lignes?
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
Vous pouvez utiliser le module 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
est la commande à gauche du tube, divisée en espaces pour créer une liste requise par subprocess.Popen
class.
command_2
est la commande à gauche de la division du tube, de la même manière que command_1
first
est un objet de la classe subprocess.Popen
, subprocess.Popen
exécute le command_1
et envoie son STDOUT à PIPE
afin que nous puissions l'utiliser comme entrée de command_2
subprocess.call
exécutera le command_2
avec son STDIN provenant du STDOUT de first
Pour la commande ps -C kswapd0 -C kswapd1 -C kswapd2 -C kswapd3 -C kswapd4 -o pid,ppid,stime,etime,time,pcpu,args
, vous pouvez faire:
#!/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)
Lisez le documentation officielle sur le sous-processus pour avoir plus d’idées.
J'utiliserais quelque chose comme psutil
pour saisir les données par programme.
Cela va prendre un peu de temps à apprendre, alors l'alternative la plus rapide et la plus décapante consiste à exécuter les commandes via une construction de style sous-shell à partir de Python.
import commands
exit_code, output = commands.getstatusoutput('ps -eo pid,ppid,user,rss,comm --sort=rss')
print '\n'.join(output.split('\n')[-10:])
J'ai déplacé le tail
en pure Python, juste pour le fun.