【发布时间】:2008-10-01 23:37:06
【问题描述】:
我正在尝试:
import commands
print commands.getoutput("ps -u 0")
但它不适用于 os x。 os 而不是 commands 给出相同的输出: 用户 PID %CPU %MEM VSZ RSS TT STAT 开始时间命令
仅此而已
【问题讨论】:
标签: python
我正在尝试:
import commands
print commands.getoutput("ps -u 0")
但它不适用于 os x。 os 而不是 commands 给出相同的输出: 用户 PID %CPU %MEM VSZ RSS TT STAT 开始时间命令
仅此而已
【问题讨论】:
标签: python
这适用于 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()
这是 Python 版本
Python 2.5.2 (r252:60911, Feb 22 2008, 07:57:53)
[GCC 4.0.1 (Apple Computer, Inc. build 5363)] on darwin
【讨论】:
如果操作系统支持 /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]
>>>
一个跨平台的解决方案(linux、freebsd、osx、windows)是使用psutil:
>>> import psutil
>>> psutil.pids()
[1, 2, 3, 6, 7, 9, 11, 12, 13, 15, ... 9406, 9414, 9428, 9444]
>>>
【讨论】:
commands 的跨平台替换是 subprocess。请参阅subprocess module documentation。 “替换旧模块”部分包括 how to get output from a command。
当然,您仍然需要针对您所在的平台将正确的参数传递给“ps”。 Python 帮不了你,虽然我偶尔看到有人提到尝试这样做的第三方库,但它们通常只在少数系统上工作(比如严格的 SysV 风格,严格的 BSD 风格,或者只是系统/proc.)
【讨论】:
上述任何 python 调用 - 但尝试 'pgrep
【讨论】:
我已经在 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
等等
Python 2.5.1
【讨论】:
如果你使用操作系统而不是命令,它会起作用:
import os
print os.system("ps -u 0")
【讨论】: