web-dev-qa-db-ja.com

Pythonでシステム情報を返すにはどうすればよいですか?

Pythonを使用して、CPU使用率、メモリ使用量(空き、使用済みなど)、プロセス数などの情報を一般的な方法で返して、同じコードをLinux、Windows、BSDなどで実行できるようにするにはどうすればよいですか?

あるいは、そのOSが実際にオペレーティング環境である場合にのみ、そのOSに固有のコードが実行されている上記のすべてのシステムで、この情報をどのように返すことができますか?

25
DavidM

クロスプラットフォームに関して:最善の策は、おそらくプラットフォーム固有のコードを記述し、それを条件付きでインポートすることです。例えば.

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でそのような情報をどこで入手できるかはわかりませんが、質問できるすばらしいWebサイトを思いつくことができます:-)

17
John Fouhy

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
5
Anthony D

psutil 必要なものを提供する必要があります:

[...]実行中のプロセスとシステム使用率(CPU、メモリ、ディスク、ネットワーク)に関する情報を取得するためのクロスプラットフォームライブラリ[...]

[...] Linux、Windows、OSX、FreeBSD、Sun Solaris、32ビットと64ビットの両方のアーキテクチャをサポートしています[...]

3
kynan
2
kylebrooks

os module を見てください

1
Giancarlo

標準のPythonライブラリが提供するよりもはるかに多くの情報を取得したいようです。私があなたなら、「ps」または「top」、またはGnomeのソースコードをダウンロードします。同じの/ KDEバージョン、または必要なすべてのUnixクロスプラットフォームビットを持っている可能性が高い任意の数のシステム監視/グラフ作成プログラムは、それらが何をするかを確認し、ctypesを使用して必要なネイティブ呼び出しを行います。

プラットフォームを検出するのは簡単です。たとえば、ctypesを使用すると、libc.soをロードしようとする場合があります。例外がスローされる場合は、「msvcrt.dll」などをロードしてみてください。 os.nameでオペレーティングシステムの名前を確認するだけであることは言うまでもありません。次に、新しいクロスプラットフォームAPIへの呼び出しを適切なプラットフォーム固有の(申し訳ありませんが)実装に委任するだけです。

完了したら、結果のパッケージをpypiにアップロードすることを忘れないでください。

1
joeforker

その目的で [〜#〜] psi [〜#〜] (Pythonシステム情報)プロジェクトがありますが、それらはまだWindowsをカバーしていません。

おそらくPSIとrecpies このように を使用して、ニーズを満たす基本的なライブラリを作成できます。

0
orip