1

「psaux」コマンドの出力を含む配列があります。私の目標は、コマンド名の列で配列を並べ替えることですが、これを行う方法がわからず、答えを見つけることができません。

これがこれまでの私のコードです

#!/usr/bin/python
import subprocess

ps = subprocess.Popen(['ps', 'aux'], stdout=subprocess.PIPE).communicate()[0]
processes = ps.split('\n')

nfields = len(processes[0].split()) - 1
for row in processes[1:]:
#    print row.split(None, nfields) //This is used to split all the value in the string
     print row

このコードスニペットの出力は次のようになります

...
root        11  0.0  0.0      0     0 ?        S<    2012   0:00 [kworker/1:0H]
root        12  0.0  0.0      0     0 ?        S     2012   0:00 [ksoftirqd/1]
root        13  0.0  0.0      0     0 ?        S     2012   0:00 [migration/2]

...

したがって、私の目標は同様の出力になりますが、最後の列でソートされるため、最終的には次のようになります。

...
root        13  0.0  0.0      0     0 ?        S     2012   0:00 [migration/2]
root        12  0.0  0.0      0     0 ?        S     2012   0:00 [ksoftirqd/1]
root        11  0.0  0.0      0     0 ?        S<    2012   0:00 [kworker/1:0H]
...

あなたの誰かがこれを行う方法について何か手がかりを持っていますか?

4

2 に答える 2

2
sorted(..., key=lambda x: x.split()[10])
于 2013-01-08T06:03:12.047 に答える
2

このようなもの:

#!/usr/bin/env python
import subprocess
from operator import itemgetter

ps = subprocess.Popen(['ps', 'aux'], stdout=subprocess.PIPE).communicate()[0]
processes = [p for p in ps.split('\n') if p]
split_processes = [p.split() for p in processes]

そして、次のように結果を印刷します。

for row in sorted(split_processes[1:], key=itemgetter(10)):
    print " ".join(row)

またはこのように(プロセス名と引数のみが必要な場合):

for row in sorted(split_processes[1:], key=itemgetter(10)):
    print " ".join(row[10:])
于 2013-01-08T06:31:59.383 に答える