Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带子字符串的Python排序字符串数组_Python_Arrays_Sorting - Fatal编程技术网

带子字符串的Python排序字符串数组

带子字符串的Python排序字符串数组,python,arrays,sorting,Python,Arrays,Sorting,我有一个数组,其中包含“ps aux”命令的输出。我的目标是使用命令名列对数组进行排序,但我不知道如何进行排序,也无法找到答案 这是到目前为止我的代码 #!/usr/bin/python import subprocess ps = subprocess.Popen(['ps', 'aux'], stdout=subprocess.PIPE).communicate()[0] processes = ps.split('\n') nfields = len(processes[0].spli

我有一个数组,其中包含“ps aux”命令的输出。我的目标是使用命令名列对数组进行排序,但我不知道如何进行排序,也无法找到答案

这是到目前为止我的代码

#!/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
此代码snipet的输出类似于

...
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]

...
。。。
根11 0.0 0.0?S<2012 0:00[kworker/1:0H]
根120.0 0.0?S 2012 0:00[ksoftirqd/1]
根13 0.0 0.0?S 2012 0:00[迁移/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]
...
。。。
根13 0.0 0.0?S 2012 0:00[迁移/2]
根120.0 0.0?S 2012 0:00[ksoftirqd/1]
根11 0.0 0.0?S<2012 0:00[kworker/1:0H]
...
你们中有人知道怎么做吗?

类似这样的事情:

sorted(..., key=lambda x: x.split()[10])
#!/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)
然后像这样打印出结果:

#!/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)
或者类似这样(如果您只需要进程名称和参数):

大概是这样的:

#!/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)
然后像这样打印出结果:

#!/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)
或者类似这样(如果您只需要进程名称和参数):


您也可以利用shell中的sort命令,而不是用python来实现这一点:
ps aux | sort--key=10
。当然,这不会去掉第一行。为此,您需要类似于awk:
ps aux | awk'NR!=1{print;}'| sort--key=10
您还可以利用shell中的sort命令:
ps aux | sort--key=10
。当然,这不会去掉第一行。为此,您需要类似于awk:
ps aux | awk'NR!=1{print;}'| sort--key=10