検索
ホームページバックエンド開発Python チュートリアルpsutil を使用して Python でシステム情報を取得する方法

3. psutil

Python を使用してスクリプトを作成し、日常の運用と保守作業を簡素化することは、Python の重要な用途です。 Linux では、pstopfree など、システムの実行ステータスを常に監視できるシステム コマンドが多数あります。 。これらのシステム情報を取得するには、Python で subprocess モジュールを呼び出し、結果を取得します。しかし、特に大量の解析コードを書かなければならない場合、そうするのは非常に面倒に思えます。

Python でシステム情報を取得するもう 1 つの良い方法は、psutil サードパーティ モジュールを使用することです。名前が示すように、psutil = プロセスおよびシステム ユーティリティです。1 ~ 2 行のコードでシステム監視を実現できるだけでなく、プラットフォームをまたいで使用することもできます。Linux/UNIX/OSX/Windows などをサポートしており、システム管理者や運用保守パートナーにとって必須のモジュールです。

1. psutil のインストール

Anaconda がインストールされている場合は、psutil がすでに利用可能です。それ以外の場合は、コマンド ラインで pip を使用してインストールする必要があります:

$ pip install psutil

アクセス許可が拒否されたインストール エラーが発生した場合は、sudo を追加して再試行してください。

2. CPU 情報の取得

まずは CPU 情報を取得しましょう:

>>> import psutil
>>> psutil.cpu_count() # CPU逻辑数量
4
>>> psutil.cpu_count(logical=False) # CPU物理核心
2
# 2说明是双核超线程, 4则是4核非超线程

psutil を使用して Python でシステム情報を取得する方法

CPU ユーザー/システム/アイドル時間の統計:

>>> psutil.cpu_times()
scputimes(user=10963.31, nice=0.0, system=5138.67, idle=356102.45)

次に、top コマンドと同様の CPU 使用率を実装し、1 秒に 1 回、合計 10 回更新します:

>>> for x in range(10):
...     print(psutil.cpu_percent(interval=1, percpu=True))
... 
[14.0, 4.0, 4.0, 4.0]
[12.0, 3.0, 4.0, 3.0]
[8.0, 4.0, 3.0, 4.0]
[12.0, 3.0, 3.0, 3.0]
[18.8, 5.1, 5.9, 5.0]
[10.9, 5.0, 4.0, 3.0]
[12.0, 5.0, 4.0, 5.0]
[15.0, 5.0, 4.0, 4.0]
[19.0, 5.0, 5.0, 4.0]
[9.0, 3.0, 2.0, 3.0]

3. メモリ情報を取得します

psutil を使用して物理メモリとスワップ メモリ情報をそれぞれ取得します:

>>> psutil.virtual_memory()
svmem(total=8589934592, available=2866520064, percent=66.6, used=7201386496, free=216178688, active=3342192640, inactive=2650341376, wired=1208852480)
>>> psutil.swap_memory()
sswap(total=1073741824, used=150732800, free=923009024, percent=14.0, sin=10705981440, sout=40353792)

はバイト単位の整数を返します。合計メモリ サイズは 8589934592 = 8 GB で、7201386496 = 6.7 GB が使用されていることがわかります。 , 66.6%が使用されています。

スワップ領域のサイズは 1073741824 = 1 GB です。

ディスク情報の取得

psutil を使用して、ディスク パーティション、ディスク使用量、およびディスク IO 情報を取得できます。

>>> psutil.disk_partitions() # 磁盘分区信息
[sdiskpart(device='/dev/disk1', mountpoint='/', fstype='hfs', opts='rw,local,rootfs,dovolfs,journaled,multilabel')]
>>> psutil.disk_usage('/') # 磁盘使用情况
sdiskusage(total=998982549504, used=390880133120, free=607840272384, percent=39.1)
>>> psutil.disk_io_counters() # 磁盘IO
sdiskio(read_count=988513, write_count=274457, read_bytes=14856830464, write_bytes=17509420032, read_time=2228966, write_time=1618405)

ディスク '/'# が確認できます。 # # の合計容量は 998982549504 = 930 GB、39.1% が使用されています。ファイル形式は HFS で、opts には読み取り可能性と書き込み可能性を示す rw が含まれ、journaled はジャーナリングのサポートを示します。

4. ネットワーク情報の取得

psutil はネットワーク インターフェイスとネットワーク接続情報を取得できます:

>>> psutil.net_io_counters() # 获取网络读写字节/包的个数
snetio(bytes_sent=3885744870, bytes_recv=10357676702, packets_sent=10613069, packets_recv=10423357, errin=0, errout=0, dropin=0, dropout=0)
>>> psutil.net_if_addrs() # 获取网络接口信息
{
  &#39;lo0&#39;: [snic(family=<AddressFamily.AF_INET: 2>, address=&#39;127.0.0.1&#39;, netmask=&#39;255.0.0.0&#39;), ...],
  &#39;en1&#39;: [snic(family=<AddressFamily.AF_INET: 2>, address=&#39;10.0.1.80&#39;, netmask=&#39;255.255.255.0&#39;), ...],
  &#39;en0&#39;: [...],
  &#39;en2&#39;: [...],
  &#39;bridge0&#39;: [...]
}
>>> psutil.net_if_stats() # 获取网络接口状态
{
  &#39;lo0&#39;: snicstats(isup=True, duplex=<NicDuplex.NIC_DUPLEX_UNKNOWN: 0>, speed=0, mtu=16384),
  &#39;en0&#39;: snicstats(isup=True, duplex=<NicDuplex.NIC_DUPLEX_UNKNOWN: 0>, speed=0, mtu=1500),
  &#39;en1&#39;: snicstats(...),
  &#39;en2&#39;: snicstats(...),
  &#39;bridge0&#39;: snicstats(...)
}

現在のネットワーク接続情報を取得するには、

net_connections() を使用します。 :

>>> psutil.net_connections()
Traceback (most recent call last):
  ...
PermissionError: [Errno 1] Operation not permitted

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  ...
psutil.AccessDenied: psutil.AccessDenied (pid=3847)

AccessDenied エラーが発生する可能性があります。その理由は、psutil もシステム インターフェイスを使用して情報を取得する必要があり、ネットワーク接続情報の取得には root 権限が必要であるためです。この場合、Python インタラクティブ環境を終了し、sudo を使用して再起動します:

$ sudo python3
Password: ******
Python 3.8 ... on darwin
Type "help", ... for more information.
>>> import psutil
>>> psutil.net_connections()
[
    sconn(fd=83, family=<AddressFamily.AF_INET6: 30>, type=1, laddr=addr(ip=&#39;::127.0.0.1&#39;, port=62911), raddr=addr(ip=&#39;::127.0.0.1&#39;, port=3306), status=&#39;ESTABLISHED&#39;, pid=3725),
    sconn(fd=84, family=<AddressFamily.AF_INET6: 30>, type=1, laddr=addr(ip=&#39;::127.0.0.1&#39;, port=62905), raddr=addr(ip=&#39;::127.0.0.1&#39;, port=3306), status=&#39;ESTABLISHED&#39;, pid=3725),
    sconn(fd=93, family=<AddressFamily.AF_INET6: 30>, type=1, laddr=addr(ip=&#39;::&#39;, port=8080), raddr=(), status=&#39;LISTEN&#39;, pid=3725),
    sconn(fd=103, family=<AddressFamily.AF_INET6: 30>, type=1, laddr=addr(ip=&#39;::127.0.0.1&#39;, port=62918), raddr=addr(ip=&#39;::127.0.0.1&#39;, port=3306), status=&#39;ESTABLISHED&#39;, pid=3725),
    sconn(fd=105, family=<AddressFamily.AF_INET6: 30>, type=1, ..., pid=3725),
    sconn(fd=106, family=<AddressFamily.AF_INET6: 30>, type=1, ..., pid=3725),
    sconn(fd=107, family=<AddressFamily.AF_INET6: 30>, type=1, ..., pid=3725),
    ...
    sconn(fd=27, family=<AddressFamily.AF_INET: 2>, type=2, ..., pid=1)
]

5. プロセス情報の取得

psutil を使用して、すべてのプロセスの詳細情報を取得できます。

>>> psutil.pids() # 所有进程ID
[3865, 3864, 3863, 3856, 3855, 3853, 3776, ..., 45, 44, 1, 0]
>>> p = psutil.Process(3776) # 获取指定进程ID=3776,其实就是当前Python交互环境
>>> p.name() # 进程名称
&#39;python3.6&#39;
>>> p.exe() # 进程exe路径
&#39;/Users/michael/anaconda3/bin/python3.6&#39;
>>> p.cwd() # 进程工作目录
&#39;/Users/michael&#39;
>>> p.cmdline() # 进程启动的命令行
[&#39;python3&#39;]
>>> p.ppid() # 父进程ID
3765
>>> p.parent() # 父进程
<psutil.Process(pid=3765, name=&#39;bash&#39;) at 4503144040>
>>> p.children() # 子进程列表
[]
>>> p.status() # 进程状态
&#39;running&#39;
>>> p.username() # 进程用户名
&#39;michael&#39;
>>> p.create_time() # 进程创建时间
1511052731.120333
>>> p.terminal() # 进程终端
&#39;/dev/ttys002&#39;
>>> p.cpu_times() # 进程使用的CPU时间
pcputimes(user=0.081150144, system=0.053269812, children_user=0.0, children_system=0.0)
>>> p.memory_info() # 进程使用的内存
pmem(rss=8310784, vms=2481725440, pfaults=3207, pageins=18)
>>> p.open_files() # 进程打开的文件
[]
>>> p.connections() # 进程相关网络连接
[]
>>> p.num_threads() # 进程的线程数量
1
>>> p.threads() # 所有线程信息
[pthread(id=1, user_time=0.090318, system_time=0.062736)]
>>> p.environ() # 进程环境变量
{&#39;SHELL&#39;: &#39;/bin/bash&#39;, &#39;PATH&#39;: &#39;/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:...&#39;, &#39;PWD&#39;: &#39;/Users/michael&#39;, &#39;LANG&#39;: &#39;zh_CN.UTF-8&#39;, ...}
>>> p.terminate() # 结束进程
Terminated: 15 <-- 自己把自己结束了

ネットワーク接続の取得と同様に、root ユーザーのプロセスを取得するには root 権限が必要です。Python 対話型環境または

.py ファイルを開始するとき、sudo 権限は必須。

psutil は、

ps コマンドの効果をシミュレートできる test() 関数も提供します:

$ sudo python3
Password: ******
Python 3.6.3 ... on darwin
Type "help", ... for more information.
>>> import psutil
>>> psutil.test()
USER         PID %MEM     VSZ     RSS TTY           START    TIME  COMMAND
root           0 24.0 74270628 2016380 ?             Nov18   40:51  kernel_task
root           1  0.1 2494140    9484 ?             Nov18   01:39  launchd
root          44  0.4 2519872   36404 ?             Nov18   02:02  UserEventAgent
root          45    ? 2474032    1516 ?             Nov18   00:14  syslogd
root          47  0.1 2504768    8912 ?             Nov18   00:03  kextd
root          48  0.1 2505544    4720 ?             Nov18   00:19  fseventsd
_appleeven    52  0.1 2499748    5024 ?             Nov18   00:00  appleeventsd
root          53  0.1 2500592    6132 ?             Nov18   00:02  configd
...

以上がpsutil を使用して Python でシステム情報を取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事は亿速云で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
Python vs. C:比較されたアプリケーションとユースケースPython vs. C:比較されたアプリケーションとユースケースApr 12, 2025 am 12:01 AM

Pythonは、データサイエンス、Web開発、自動化タスクに適していますが、Cはシステムプログラミング、ゲーム開発、組み込みシステムに適しています。 Pythonは、そのシンプルさと強力なエコシステムで知られていますが、Cは高性能および基礎となる制御機能で知られています。

2時間のPython計画:現実的なアプローチ2時間のPython計画:現実的なアプローチApr 11, 2025 am 12:04 AM

2時間以内にPythonの基本的なプログラミングの概念とスキルを学ぶことができます。 1.変数とデータ型、2。マスターコントロールフロー(条件付きステートメントとループ)、3。機能の定義と使用を理解する4。

Python:主要なアプリケーションの調査Python:主要なアプリケーションの調査Apr 10, 2025 am 09:41 AM

Pythonは、Web開発、データサイエンス、機械学習、自動化、スクリプトの分野で広く使用されています。 1)Web開発では、DjangoおよびFlask Frameworksが開発プロセスを簡素化します。 2)データサイエンスと機械学習の分野では、Numpy、Pandas、Scikit-Learn、Tensorflowライブラリが強力なサポートを提供します。 3)自動化とスクリプトの観点から、Pythonは自動テストやシステム管理などのタスクに適しています。

2時間でどのくらいのPythonを学ぶことができますか?2時間でどのくらいのPythonを学ぶことができますか?Apr 09, 2025 pm 04:33 PM

2時間以内にPythonの基本を学ぶことができます。 1。変数とデータ型を学習します。2。ステートメントやループの場合などのマスター制御構造、3。関数の定義と使用を理解します。これらは、簡単なPythonプログラムの作成を開始するのに役立ちます。

プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は?プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は?Apr 02, 2025 am 07:18 AM

10時間以内にコンピューター初心者プログラミングの基本を教える方法は?コンピューター初心者にプログラミングの知識を教えるのに10時間しかない場合、何を教えることを選びますか...

中間の読書にどこでもfiddlerを使用するときにブラウザによって検出されないようにするにはどうすればよいですか?中間の読書にどこでもfiddlerを使用するときにブラウザによって検出されないようにするにはどうすればよいですか?Apr 02, 2025 am 07:15 AM

fiddlereveryversings for the-middleの測定値を使用するときに検出されないようにする方法

Python 3.6にピクルスファイルをロードするときに「__Builtin__」モジュールが見つからない場合はどうすればよいですか?Python 3.6にピクルスファイルをロードするときに「__Builtin__」モジュールが見つからない場合はどうすればよいですか?Apr 02, 2025 am 07:12 AM

Python 3.6のピクルスファイルのロードレポートエラー:modulenotFounderror:nomodulenamed ...

風光明媚なスポットコメント分析におけるJieba Wordセグメンテーションの精度を改善する方法は?風光明媚なスポットコメント分析におけるJieba Wordセグメンテーションの精度を改善する方法は?Apr 02, 2025 am 07:09 AM

風光明媚なスポットコメント分析におけるJieba Wordセグメンテーションの問題を解決する方法は?風光明媚なスポットコメントと分析を行っているとき、私たちはしばしばJieba Wordセグメンテーションツールを使用してテキストを処理します...

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境