【问题标题】:How can I return system information in Python?如何在 Python 中返回系统信息?
【发布时间】:2010-10-02 18:34:56
【问题描述】:

使用 Python,如何以通用方式返回 CPU 使用率、内存使用率(空闲、已使用等)、进程计数等信息,以便在 Linux、Windows、BSD 等上运行相同的代码?

或者,只有当操作系统确实是操作环境时,如何才能在所有上述系统上返回此信息,并且该操作系统特定于该操作系统的代码正在运行?

【问题讨论】:

    标签: python operating-system


    【解决方案1】:

    看看os module

    【讨论】:

      【解决方案2】:

      看起来您想要获得比标准 Python 库提供的更多信息。如果我是你,我会下载 'ps' 或 'top' 的源代码,或者相同的 Gnome/KDE 版本,或者任何数量的系统监控/绘图程序,它们更有可能拥有所有必要的 Unix 交叉平台位,看看他们做了什么,然后使用 ctypes 进行必要的本机调用。

      检测平台很简单。例如,对于 ctypes,您可能会尝试加载 libc.so,如果引发异常,请尝试加载“msvcrt.dll”等等。更不用说简单地使用 os.name 检查操作系统的名称。然后只需将对新的跨平台 API 的调用委托给适当的平台特定(抱歉)实现。

      完成后,不要忘记将生成的包上传到 pypi。

      【讨论】:

        【解决方案3】:

        在 Linux 环境中,您可以从 /proc 文件系统中读取数据。

        ~$ cat /proc/meminfo
        MemTotal:      2076816 kB
        MemFree:        130284 kB
        Buffers:        192664 kB
        Cached:        1482760 kB
        SwapCached:          0 kB
        Active:         206584 kB
        Inactive:      1528608 kB
        HighTotal:     1179484 kB
        HighFree:       120768 kB
        LowTotal:       897332 kB
        LowFree:          9516 kB
        SwapTotal:     2650684 kB
        SwapFree:      2650632 kB
        Dirty:              64 kB
        Writeback:          12 kB
        AnonPages:       59668 kB
        Mapped:          22008 kB
        Slab:           200744 kB
        PageTables:       1220 kB
        NFS_Unstable:        0 kB
        Bounce:              0 kB
        CommitLimit:   3689092 kB
        Committed_AS:   263892 kB
        VmallocTotal:   114680 kB
        VmallocUsed:      3604 kB
        VmallocChunk:   110752 kB
        

        【讨论】:

          【解决方案4】:

          【讨论】:

          • 平台模块没有返回任何他正在寻找的东西。
          【解决方案5】:

          PSI(Python 系统信息)项目就是以此为目标的,但它们还没有涵盖 Windows。

          您可能可以使用 PSI 和 recpies like this one 并创建一个满足您需求的基本库。

          【讨论】:

            【解决方案6】:

            关于跨平台:您最好的选择可能是编写特定于平台的代码,然后有条件地导入它。例如

            import sys
            if sys.platform == 'win32':
              import win32_sysinfo as sysinfo
            elif sys.platform == 'darwin':
              import mac_sysinfo as sysinfo
            elif 'linux' in sys.platform:
              import linux_sysinfo as sysinfo
            #etc
            
            print 'Memory available:', sysinfo.memory_available()
            

            对于具体的资源,Anthony 指出你可以在 linux 下访问/proc。对于 Windows,您可以在 Microsoft Script Repository 处查看。我不知道在哪里可以获得有关 Mac 的此类信息,但我可以想到一个很棒的网站,您可以在其中询问:-)

            【讨论】:

            【解决方案7】:

            psutil 应该提供您所需要的:

            [...] 跨平台库,用于检索有关正在运行的进程和系统利用率(CPU、内存、磁盘、网络)的信息[...]

            [...] 支持 32 位和 64 位架构的 Linux、Windows、OSX、FreeBSD 和 Sun Solaris [...]

            【讨论】:

              猜你喜欢
              • 2010-10-02
              • 2011-03-07
              • 2010-10-02
              • 2010-09-25
              • 2016-03-12
              • 2011-06-02
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多