web-dev-qa-db-ja.com

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
3
ShuKaibutsu

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と同様にパイプ分割の左側のコマンドです

  • firstsubprocess.Popenクラスのオブジェクトです。subprocess.Popencommand_1を実行し、そのSTDOUTをPIPEに送信して、command_2への入力として使用できるようにします

  • subprocess.callは、firstのSTDOUTからのSTDINでcommand_2を実行します

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)

サブプロセスの公式ドキュメント を読んで、より多くのアイデアを得てください。

5
heemayl

psutil のようなものを使用して、プログラムでデータを取得します。

学習には少し時間がかかりますので、より迅速でスクラップになる代替手段は、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に移動しました。

3
Oli