哪个是使用python在unix中获取正在运行的进程列表的最佳方法?

时间:2022-10-07 20:15:50

I'm trying:

import commands
print commands.getoutput("ps -u 0")

But it doesn't work on os x. os instead of commands gives the same output: USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND

但它不适用于os x。 os而不是命令给出相同的输出:USER PID%CPU%MEM VSZ RSS TT STAT STARTED TIME COMMAND

nothing more

6 个解决方案

#1


8  

This works on Mac OS X 10.5.5. Note the capital -U option. Perhaps that's been your problem.

这适用于Mac OS X 10.5.5。注意大写-U选项。也许那是你的问题。

import subprocess
ps = subprocess.Popen("ps -U 0", shell=True, stdout=subprocess.PIPE)
print ps.stdout.read()
ps.stdout.close()
ps.wait()

Here's the Python version

这是Python版本

Python 2.5.2 (r252:60911, Feb 22 2008, 07:57:53) 
[GCC 4.0.1 (Apple Computer, Inc. build 5363)] on darwin

#2


6  

If the OS support the /proc fs you can do:

如果操作系统支持/ proc fs,你可以这样做:

>>> import os
>>> pids = [int(x) for x in os.listdir('/proc') if x.isdigit()]
>>> pids
[1, 2, 3, 6, 7, 9, 11, 12, 13, 15, ... 9406, 9414, 9428, 9444]
>>>

A cross-platform solution (linux, freebsd, osx, windows) is by using psutil:

跨平台解决方案(linux,freebsd,osx,windows)是使用psutil:

>>> import psutil
>>> psutil.pids()
[1, 2, 3, 6, 7, 9, 11, 12, 13, 15, ... 9406, 9414, 9428, 9444]    
>>>

#3


5  

The cross-platform replacement for commands is subprocess. See the subprocess module documentation. The 'Replacing older modules' section includes how to get output from a command.

命令的跨平台替换是子进程。请参阅子进程模块文档。 “替换旧模块”部分包括如何从命令获取输出。

Of course, you still have to pass the right arguments to 'ps' for the platform you're on. Python can't help you with that, and though I've seen occasional mention of third-party libraries that try to do this, they usually only work on a few systems (like strictly SysV style, strictly BSD style, or just systems with /proc.)

当然,你仍然需要为你所在的平台传递正确的参数'ps'。 Python无法帮助你,虽然我偶尔会看到尝试这样做的第三方库,但它们通常只适用于少数几个系统(如严格的SysV风格,严格的BSD风格,或只是/ proc中。)

#4


1  

any of the above python calls - but try 'pgrep

任何上面的python调用 - 但尝试'pgrep

#5


1  

I've tried in on OS X (10.5.5) and seems to work just fine:

我已经尝试过OS X(10.5.5)并且似乎工作得很好:

print commands.getoutput("ps -u 0")

UID   PID TTY           TIME CMD
0     1 ??         0:01.62 /sbin/launchd
0    10 ??         0:00.57 /usr/libexec/kextd

etc.

Python 2.5.1

#6


0  

It works if you use os instead of commands:

如果您使用os而不是命令,它可以工作:

import os
print os.system("ps -u 0")

#1


8  

This works on Mac OS X 10.5.5. Note the capital -U option. Perhaps that's been your problem.

这适用于Mac OS X 10.5.5。注意大写-U选项。也许那是你的问题。

import subprocess
ps = subprocess.Popen("ps -U 0", shell=True, stdout=subprocess.PIPE)
print ps.stdout.read()
ps.stdout.close()
ps.wait()

Here's the Python version

这是Python版本

Python 2.5.2 (r252:60911, Feb 22 2008, 07:57:53) 
[GCC 4.0.1 (Apple Computer, Inc. build 5363)] on darwin

#2


6  

If the OS support the /proc fs you can do:

如果操作系统支持/ proc fs,你可以这样做:

>>> import os
>>> pids = [int(x) for x in os.listdir('/proc') if x.isdigit()]
>>> pids
[1, 2, 3, 6, 7, 9, 11, 12, 13, 15, ... 9406, 9414, 9428, 9444]
>>>

A cross-platform solution (linux, freebsd, osx, windows) is by using psutil:

跨平台解决方案(linux,freebsd,osx,windows)是使用psutil:

>>> import psutil
>>> psutil.pids()
[1, 2, 3, 6, 7, 9, 11, 12, 13, 15, ... 9406, 9414, 9428, 9444]    
>>>

#3


5  

The cross-platform replacement for commands is subprocess. See the subprocess module documentation. The 'Replacing older modules' section includes how to get output from a command.

命令的跨平台替换是子进程。请参阅子进程模块文档。 “替换旧模块”部分包括如何从命令获取输出。

Of course, you still have to pass the right arguments to 'ps' for the platform you're on. Python can't help you with that, and though I've seen occasional mention of third-party libraries that try to do this, they usually only work on a few systems (like strictly SysV style, strictly BSD style, or just systems with /proc.)

当然,你仍然需要为你所在的平台传递正确的参数'ps'。 Python无法帮助你,虽然我偶尔会看到尝试这样做的第三方库,但它们通常只适用于少数几个系统(如严格的SysV风格,严格的BSD风格,或只是/ proc中。)

#4


1  

any of the above python calls - but try 'pgrep

任何上面的python调用 - 但尝试'pgrep

#5


1  

I've tried in on OS X (10.5.5) and seems to work just fine:

我已经尝试过OS X(10.5.5)并且似乎工作得很好:

print commands.getoutput("ps -u 0")

UID   PID TTY           TIME CMD
0     1 ??         0:01.62 /sbin/launchd
0    10 ??         0:00.57 /usr/libexec/kextd

etc.

Python 2.5.1

#6


0  

It works if you use os instead of commands:

如果您使用os而不是命令,它可以工作:

import os
print os.system("ps -u 0")