【问题标题】:Which is the best way to get a list of running processes in unix with python?使用 python 获取 unix 中正在运行的进程列表的最佳方法是什么?
【发布时间】: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


    【解决方案1】:

    这适用于 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
    

    【讨论】:

    • 这不会是非常跨平台的。 Linux/Unix 上的 ps 选项将有所不同,在 Windows 上根本不存在。
    【解决方案2】:

    如果操作系统支持 /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]    
    >>>
    

    【讨论】:

      【解决方案3】:

      commands 的跨平台替换是 subprocess。请参阅subprocess module documentation。 “替换旧模块”部分包括 how to get output from a command

      当然,您仍然需要针对您所在的平台将正确的参数传递给“ps”。 Python 帮不了你,虽然我偶尔看到有人提到尝试这样做的第三方库,但它们通常只在少数系统上工作(比如严格的 SysV 风格,严格的 BSD 风格,或者只是系统/proc.)

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          我已经在 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

          【讨论】:

            【解决方案6】:

            如果你使用操作系统而不是命令,它会起作用:

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

            【讨论】:

            • os.system() 不会给你输出,输出只是打印到屏幕上。 os.system() 返回进程退出状态,您将在输出中看到尾随的“0”。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2018-06-26
            • 2020-10-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-02-02
            • 2011-01-12
            相关资源
            最近更新 更多