Pythonで現在のCPUとRAMの使用量を取得するにはどうすればよいですか?


336

Pythonで現在のシステムステータス(現在のCPU、RAM、空きディスク領域など)を取得するための好ましい方法は何ですか?* nixおよびWindowsプラットフォームのボーナスポイント。

私の検索からそれを抽出するいくつかの可能な方法があるようです:

  1. PSIなどのライブラリ(現在は積極的に開発されておらず、複数のプラットフォームでサポートされていないようです)またはpystatgrabのようなライブラリを使用します(2007年以降はアクティビティがないようで、Windowsはサポートされていません)。

  2. そのような使用としてのプラットフォーム固有のコードを使用するos.popen("ps")か、* nixシステムのためのと同様のMEMORYSTATUS中をctypes.windll.kernel32(参照ActiveStateの上でこのレシピを Windowsプラットフォーム用)。Pythonクラスをこれらすべてのコードスニペットと一緒に配置できます。

それらの方法が悪いということではありませんが、同じことをするためのサポートされたマルチプラットフォームの方法がすでにありますか?


動的インポートを使用して、独自のマルチプラットフォームライブラリを構築できます: "if sys.platform == 'win32':import win_sysstatus as sysstatus; else" ...
John Fouhy

1
App Engineでも動作するものがあると便利です。
Attila O.

パッケージの古さは重要ですか?誰かが初めてそれらを正しく理解した場合、なぜ彼らはまだ正しくないのでしょうか?
Paul Smith、

回答:


411

psutilライブラリは、さまざまなプラットフォームのCPU、RAMなどに関する情報を提供します。

psutilは、Pythonを使用して実行中のプロセスとシステム使用率(CPU、メモリ)に関する情報をポータブルな方法で取得するためのインターフェイスを提供するモジュールであり、ps、top、Windowsタスクマネージャーなどのツールによって提供される多くの機能を実装します。

現在、Linux、Windows、OSX、Sun Solaris、FreeBSD、OpenBSD、NetBSDの32ビットと64ビットの両方のアーキテクチャをサポートしており、Pythonバージョンは2.6から3.5です(Python 2.4および2.5のユーザーは2.1.3バージョンを使用できます)。


いくつかの例:

#!/usr/bin/env python
import psutil
# gives a single float value
psutil.cpu_percent()
# gives an object with many fields
psutil.virtual_memory()
# you can convert that object to a dictionary 
dict(psutil.virtual_memory()._asdict())
# you can have the percentage of used RAM
psutil.virtual_memory().percent
79.2
# you can calculate percentage of available memory
psutil.virtual_memory().available * 100 / psutil.virtual_memory().total
20.8

その他の概念と関心の概念を提供する他のドキュメントは次のとおりです。


33
OSXで私のために働いた:$ pip install psutil; >>> import psutil; psutil.cpu_percent()そして>>> psutil.virtual_memory()素敵なVMEMオブジェクトを返します:vmem(total=8589934592L, available=4073336832L, percent=52.6, used=5022085120L, free=3560255488L, active=2817949696L, inactive=513081344L, wired=1691054080L)
コンロ

12
psutilライブラリなしでこれを行うにはどうすればよいですか?
BigBrownBear00

2
@ user1054424 Pythonにはresourceという組み込みライブラリがあります。ただし、それを使用して実行できるほとんどのことは、単一のpythonプロセスが使用しているメモリおよび/またはその子プロセスを取得することです。また、あまり正確ではないようです。簡単なテストでは、Macのユーティリティツールからリソースが約2MBオフになっていることがわかりました。
オースティンA

12
@ BigBrownBear00は、psutilのソースを確認するだけです;)
Mehulkumar

1
@Jon Cage hi Jon、空きメモリと使用可能なメモリの違いを確認しますか?psutil.virtual_memory()を使用して、分析のためにメモリにロードできるデータの量を決定することを計画しています。ご協力いただきありがとうございます!
AiRiFiEd

66

psutilライブラリを使用します。Ubuntu 18.04では、pipは5.5.0(最新バージョン)を2019年1月30日の時点でインストールしました。古いバージョンは多少異なる動作をする場合があります。Pythonでこれを実行すると、psutilのバージョンを確認できます。

from __future__ import print_function  # for Python2
import psutil
print(psutil.__versi‌​on__)

メモリとCPUの統計を取得するには:

from __future__ import print_function
import psutil
print(psutil.cpu_percent())
print(psutil.virtual_memory())  # physical memory usage
print('memory % used:', psutil.virtual_memory()[2])

virtual_memory(タプル)は、システム全体の使用率メモリを有することになります。これは、Ubuntu 18.04で私にとって数パーセント過大評価されているようです。

現在のPythonインスタンスによって使用されているメモリを取得することもできます。

import os
import psutil
pid = os.getpid()
py = psutil.Process(pid)
memoryUse = py.memory_info()[0]/2.**30  # memory use in GB...I think
print('memory use:', memoryUse)

これは、Pythonスクリプトの現在のメモリ使用量を示します。

psutilのpypiページにさらに詳細な例があります


32

Linuxのみ:stdlib依存関係のみのRAM使用のワンライナー:

import os
tot_m, used_m, free_m = map(int, os.popen('free -t -m').readlines()[-1].split()[1:])

編集:指定されたソリューションのOS依存関係


1
非常に便利!人間が読める単位で直接取得するには:os.popen('free -th').readlines()[-1].split()[1:]。この行は文字列のリストを返すことに注意してください。
iipr

ありpython:3.8-slim-busterませんfree
マーティン・トーマ

21

以下のコードでは、外部ライブラリなしでうまくいきました。Python 2.7.9でテストしました

CPU使用率

import os

    CPU_Pct=str(round(float(os.popen('''grep 'cpu ' /proc/stat | awk '{usage=($2+$4)*100/($2+$4+$5)} END {print usage }' ''').readline()),2))

    #print results
    print("CPU Usage = " + CPU_Pct)

ラムの使用、合計、使用、無料

import os
mem=str(os.popen('free -t -m').readlines())
"""
Get a whole line of memory output, it will be something like below
['             total       used       free     shared    buffers     cached\n', 
'Mem:           925        591        334         14         30        355\n', 
'-/+ buffers/cache:        205        719\n', 
'Swap:           99          0         99\n', 
'Total:        1025        591        434\n']
 So, we need total memory, usage and free memory.
 We should find the index of capital T which is unique at this string
"""
T_ind=mem.index('T')
"""
Than, we can recreate the string with this information. After T we have,
"Total:        " which has 14 characters, so we can start from index of T +14
and last 4 characters are also not necessary.
We can create a new sub-string using this information
"""
mem_G=mem[T_ind+14:-4]
"""
The result will be like
1025        603        422
we need to find first index of the first space, and we can start our substring
from from 0 to this index number, this will give us the string of total memory
"""
S1_ind=mem_G.index(' ')
mem_T=mem_G[0:S1_ind]
"""
Similarly we will create a new sub-string, which will start at the second value. 
The resulting string will be like
603        422
Again, we should find the index of first space and than the 
take the Used Memory and Free memory.
"""
mem_G1=mem_G[S1_ind+8:]
S2_ind=mem_G1.index(' ')
mem_U=mem_G1[0:S2_ind]

mem_F=mem_G1[S2_ind+8:]
print 'Summary = ' + mem_G
print 'Total Memory = ' + mem_T +' MB'
print 'Used Memory = ' + mem_U +' MB'
print 'Free Memory = ' + mem_F +' MB'

1
Pythonでの文字列処理によって処理される方がよいgrepと思いませんawkか?
Reinderien 2018年

個人的にはawkに慣れていないため、以下のcpu使用スニペットのawklessバージョンを作成しました。とても便利です、ありがとう!
ジェイ

3
このコードは外部ライブラリを使用しないと言っても不誠実です。実際、これらはgrep、awk、およびfreeの可用性に大きく依存しています。これにより、上記のコードは移植できなくなります。OPは「* nixおよびWindowsプラットフォームのボーナスポイント」と述べました。
キャプテンレプトン2018年

10

これは私が少し前にまとめたものです。それはウィンドウのみですが、あなたが必要なことの一部を得るのを助けるかもしれません。

派生元:「sys利用可能なメモリ用」 http://msdn2.microsoft.com/en-us/library/aa455130.aspx

「個々のプロセス情報とPythonスクリプトの例」 http://www.microsoft.com/technet/scriptcenter/scripts/default.mspx?mfr=true

注:WMIインターフェイス/プロセスも同様のタスクを実行するために利用できます。現在の方法は私のニーズをカバーしているため、ここでは使用していませんが、いつかこれを拡張または改善する必要がある場合は、WMIツールを調査することをお勧めします。 。

PythonのWMI:

http://tgolden.sc.sabren.com/python/wmi.html

コード:

'''
Monitor window processes

derived from:
>for sys available mem
http://msdn2.microsoft.com/en-us/library/aa455130.aspx

> individual process information and python script examples
http://www.microsoft.com/technet/scriptcenter/scripts/default.mspx?mfr=true

NOTE: the WMI interface/process is also available for performing similar tasks
        I'm not using it here because the current method covers my needs, but if someday it's needed
        to extend or improve this module, then may want to investigate the WMI tools available.
        WMI for python:
        http://tgolden.sc.sabren.com/python/wmi.html
'''

__revision__ = 3

import win32com.client
from ctypes import *
from ctypes.wintypes import *
import pythoncom
import pywintypes
import datetime


class MEMORYSTATUS(Structure):
    _fields_ = [
                ('dwLength', DWORD),
                ('dwMemoryLoad', DWORD),
                ('dwTotalPhys', DWORD),
                ('dwAvailPhys', DWORD),
                ('dwTotalPageFile', DWORD),
                ('dwAvailPageFile', DWORD),
                ('dwTotalVirtual', DWORD),
                ('dwAvailVirtual', DWORD),
                ]


def winmem():
    x = MEMORYSTATUS() # create the structure
    windll.kernel32.GlobalMemoryStatus(byref(x)) # from cytypes.wintypes
    return x    


class process_stats:
    '''process_stats is able to provide counters of (all?) the items available in perfmon.
    Refer to the self.supported_types keys for the currently supported 'Performance Objects'

    To add logging support for other data you can derive the necessary data from perfmon:
    ---------
    perfmon can be run from windows 'run' menu by entering 'perfmon' and enter.
    Clicking on the '+' will open the 'add counters' menu,
    From the 'Add Counters' dialog, the 'Performance object' is the self.support_types key.
    --> Where spaces are removed and symbols are entered as text (Ex. # == Number, % == Percent)
    For the items you wish to log add the proper attribute name in the list in the self.supported_types dictionary,
    keyed by the 'Performance Object' name as mentioned above.
    ---------

    NOTE: The 'NETFramework_NETCLRMemory' key does not seem to log dotnet 2.0 properly.

    Initially the python implementation was derived from:
    http://www.microsoft.com/technet/scriptcenter/scripts/default.mspx?mfr=true
    '''
    def __init__(self,process_name_list=[],perf_object_list=[],filter_list=[]):
        '''process_names_list == the list of all processes to log (if empty log all)
        perf_object_list == list of process counters to log
        filter_list == list of text to filter
        print_results == boolean, output to stdout
        '''
        pythoncom.CoInitialize() # Needed when run by the same process in a thread

        self.process_name_list = process_name_list
        self.perf_object_list = perf_object_list
        self.filter_list = filter_list

        self.win32_perf_base = 'Win32_PerfFormattedData_'

        # Define new datatypes here!
        self.supported_types = {
                                    'NETFramework_NETCLRMemory':    [
                                                                        'Name',
                                                                        'NumberTotalCommittedBytes',
                                                                        'NumberTotalReservedBytes',
                                                                        'NumberInducedGC',    
                                                                        'NumberGen0Collections',
                                                                        'NumberGen1Collections',
                                                                        'NumberGen2Collections',
                                                                        'PromotedMemoryFromGen0',
                                                                        'PromotedMemoryFromGen1',
                                                                        'PercentTimeInGC',
                                                                        'LargeObjectHeapSize'
                                                                     ],

                                    'PerfProc_Process':              [
                                                                          'Name',
                                                                          'PrivateBytes',
                                                                          'ElapsedTime',
                                                                          'IDProcess',# pid
                                                                          'Caption',
                                                                          'CreatingProcessID',
                                                                          'Description',
                                                                          'IODataBytesPersec',
                                                                          'IODataOperationsPersec',
                                                                          'IOOtherBytesPersec',
                                                                          'IOOtherOperationsPersec',
                                                                          'IOReadBytesPersec',
                                                                          'IOReadOperationsPersec',
                                                                          'IOWriteBytesPersec',
                                                                          'IOWriteOperationsPersec'     
                                                                      ]
                                }

    def get_pid_stats(self, pid):
        this_proc_dict = {}

        pythoncom.CoInitialize() # Needed when run by the same process in a thread
        if not self.perf_object_list:
            perf_object_list = self.supported_types.keys()

        for counter_type in perf_object_list:
            strComputer = "."
            objWMIService = win32com.client.Dispatch("WbemScripting.SWbemLocator")
            objSWbemServices = objWMIService.ConnectServer(strComputer,"root\cimv2")

            query_str = '''Select * from %s%s''' % (self.win32_perf_base,counter_type)
            colItems = objSWbemServices.ExecQuery(query_str) # "Select * from Win32_PerfFormattedData_PerfProc_Process")# changed from Win32_Thread        

            if len(colItems) > 0:        
                for objItem in colItems:
                    if hasattr(objItem, 'IDProcess') and pid == objItem.IDProcess:

                            for attribute in self.supported_types[counter_type]:
                                eval_str = 'objItem.%s' % (attribute)
                                this_proc_dict[attribute] = eval(eval_str)

                            this_proc_dict['TimeStamp'] = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.') + str(datetime.datetime.now().microsecond)[:3]
                            break

        return this_proc_dict      


    def get_stats(self):
        '''
        Show process stats for all processes in given list, if none given return all processes   
        If filter list is defined return only the items that match or contained in the list
        Returns a list of result dictionaries
        '''    
        pythoncom.CoInitialize() # Needed when run by the same process in a thread
        proc_results_list = []
        if not self.perf_object_list:
            perf_object_list = self.supported_types.keys()

        for counter_type in perf_object_list:
            strComputer = "."
            objWMIService = win32com.client.Dispatch("WbemScripting.SWbemLocator")
            objSWbemServices = objWMIService.ConnectServer(strComputer,"root\cimv2")

            query_str = '''Select * from %s%s''' % (self.win32_perf_base,counter_type)
            colItems = objSWbemServices.ExecQuery(query_str) # "Select * from Win32_PerfFormattedData_PerfProc_Process")# changed from Win32_Thread

            try:  
                if len(colItems) > 0:
                    for objItem in colItems:
                        found_flag = False
                        this_proc_dict = {}

                        if not self.process_name_list:
                            found_flag = True
                        else:
                            # Check if process name is in the process name list, allow print if it is
                            for proc_name in self.process_name_list:
                                obj_name = objItem.Name
                                if proc_name.lower() in obj_name.lower(): # will log if contains name
                                    found_flag = True
                                    break

                        if found_flag:
                            for attribute in self.supported_types[counter_type]:
                                eval_str = 'objItem.%s' % (attribute)
                                this_proc_dict[attribute] = eval(eval_str)

                            this_proc_dict['TimeStamp'] = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.') + str(datetime.datetime.now().microsecond)[:3]
                            proc_results_list.append(this_proc_dict)

            except pywintypes.com_error, err_msg:
                # Ignore and continue (proc_mem_logger calls this function once per second)
                continue
        return proc_results_list     


def get_sys_stats():
    ''' Returns a dictionary of the system stats'''
    pythoncom.CoInitialize() # Needed when run by the same process in a thread
    x = winmem()

    sys_dict = { 
                    'dwAvailPhys': x.dwAvailPhys,
                    'dwAvailVirtual':x.dwAvailVirtual
                }
    return sys_dict


if __name__ == '__main__':
    # This area used for testing only
    sys_dict = get_sys_stats()

    stats_processor = process_stats(process_name_list=['process2watch'],perf_object_list=[],filter_list=[])
    proc_results = stats_processor.get_stats()

    for result_dict in proc_results:
        print result_dict

    import os
    this_pid = os.getpid()
    this_proc_results = stats_processor.get_pid_stats(this_pid)

    print 'this proc results:'
    print this_proc_results

http://monkut.webfactional.com/blog/archive/2009/1/21/windows-process-memory-logging-python


古いものは不正な値を返す可能性があるため、GlobalMemoryStatusの代わりにGlobalMemoryStatusExを使用します。
phobie 2012

7
from x import *文は避けてください!それらはメイン名前空間を乱雑にし、他の関数と変数を上書きします。
phobie 2012

6

空きメモリの瞬間的な変動を見つけることができ、meminfoへのクエリを感じたので、これには通常の情報ソースを使用することを選択しましたデータソースのが役立つ。これは、事前に解析されたいくつかの関連パラメーターを取得するのにも役立ちました。

コード

import os

linux_filepath = "/proc/meminfo"
meminfo = dict(
    (i.split()[0].rstrip(":"), int(i.split()[1]))
    for i in open(linux_filepath).readlines()
)
meminfo["memory_total_gb"] = meminfo["MemTotal"] / (2 ** 20)
meminfo["memory_free_gb"] = meminfo["MemFree"] / (2 ** 20)
meminfo["memory_available_gb"] = meminfo["MemAvailable"] / (2 ** 20)

参照用の出力(詳細な分析のためにすべての改行を削除しました)

MemTotal:1014500 kB MemFree:562680 kB MemAvailable:646364 kBバッファー:15144 kBキャッシュ:210720 kB SwapCached:0 kBアクティブ:261476 kB非アクティブ:128888 kBアクティブ(anon):167092 kB非アクティブ(anon):20888 kBアクティブ(ファイル) :94384 kB非アクティブ(ファイル):108000 kB削除不可:3652 kBロック:3652 kB SwapTotal:0 kB SwapFree:0 kBダーティ:0 kBライトバック:0 kB AnonPages:168160 kBマップ:81352 kB Shmem:21060 kBスラブ:34492 kB SReclaimable:18044 kB SUnreclaim:16448 kB KernelStack:2672 kBページテーブル:8180 kB NFS_Unstable:0 kBバウンス:0 kB WritebackTmp:0 kB CommitLimit:507248 kB Committed_AS:1038756 kB VmallocTotal:34359738367 kB VmallocUsec:CormrupkBrupmCorprupt:0KB 0 kB AnonHugePages:88064 kB CmaTotal:0 kB CmaFree:0 kB HugePages_Total:0 HugePages_Free:0 HugePages_Rsvd:0 HugePages_Surp:0 Hugepagesize:2048 kB DirectMap4k:43008 kB DirectMap2M:1005568 kB


期待どおりに動作しないようです:stackoverflow.com/q/61498709/562769
Martin Thoma

4

これらの回答はPython 2用に書かれたように思います。いずれにしてもresource、Python 3で利用できる標準パッケージについては誰も言及していません。これは、特定のプロセス(デフォルトではPythonプロセスを呼び出す)のリソース制限を取得するためのコマンドを提供します。これは、システム全体のリソースの現在の使用状況を取得することと同じではありませんが、たとえば、「このスクリプトではXのRAMのみを使用するようにしたい」などの同じ問題のいくつかを解決できます。


3

"...現在のシステムステータス(現在のCPU、RAM、空きディスク領域など)"と "* nixとWindowsプラットフォーム"は、実現が難しい組み合わせです。

オペレーティングシステムは、これらのリソースの管理方法が根本的に異なります。実際、これらはシステムとしてカウントされるものやアプリケーション時間としてカウントされるものを定義するようなコアコンセプトが異なります。

「空きディスク容量」?「ディスク容量」とは何ですか?すべてのデバイスのすべてのパーティション?マルチブート環境の外部パーティションについてはどうですか?

これを可能にするWindowsと* nixの間に十分なコンセンサスがあるとは思えません。確かに、Windowsと呼ばれるさまざまなオペレーティングシステム間には合意さえありません。XPとVistaの両方で機能する単一のWindows APIはありますか?


4
df -hWindowsと* nixの両方で「ディスク領域」の質問に答えます。
jfs 2008年

4
@JFSebastian:どのWindowsですか?「df」が認識されない... Windows XP Proからのエラーメッセージが表示されます。何が欠けていますか?
S.Lott、2008年

3
Windowsにも新しいプログラムをインストールできます。
jfs 2015年

2

CPU使用率に関するこのスクリプト:

import os

def get_cpu_load():
    """ Returns a list CPU Loads"""
    result = []
    cmd = "WMIC CPU GET LoadPercentage "
    response = os.popen(cmd + ' 2>&1','r').read().strip().split("\r\n")
    for load in response[1:]:
       result.append(int(load))
    return result

if __name__ == '__main__':
    print get_cpu_load()

1
  • CPUの詳細については、psutilライブラリを使用します

    https://psutil.readthedocs.io/en/latest/#cpu

  • RAM周波数(MHz)の場合は、組み込みLinuxライブラリdmidecodeを使用して、出力を少し操作します;)。このコマンドにはroot権限が必要なので、パスワードも入力してください。次のコマンドをコピーして、mypassをパスワードに置き換えてください

import os

os.system("echo mypass | sudo -S dmidecode -t memory | grep 'Clock Speed' | cut -d ':' -f2")

-------------------出力---------------------------
1600 MT / s
不明
1600 MT / s
不明0

  • より具体的には
    [i for i in os.popen("echo mypass | sudo -S dmidecode -t memory | grep 'Clock Speed' | cut -d ':' -f2").read().split(' ') if i.isdigit()]

--------------------------出力----------------------- -
['1600'、 '1600']


さらに説明を追加
Paras Korat

1

プログラムのごとのメモリと時間分析を取得するには、memory_profilerおよびを使用することをお勧めしline_profilerます。

インストール:

# Time profiler
$ pip install line_profiler
# Memory profiler
$ pip install memory_profiler
# Install the dependency for a faster analysis
$ pip install psutil

共通部分は、それぞれのデコレーターを使用して、分析する関数を指定することです。

例:Pythonファイルmain.pyに分析したい関数がいくつかあります。それらの1つですlinearRegressionfit()@profile時間とメモリの両方に関してコードをプロファイルするのに役立つデコレータを使用する必要があります。

関数定義に次の変更を加えます

@profile
def linearRegressionfit(Xt,Yt,Xts,Yts):
    lr=LinearRegression()
    model=lr.fit(Xt,Yt)
    predict=lr.predict(Xts)
    # More Code

以下のために時間をプロファイリング

実行:

$ kernprof -l -v main.py

出力

Total time: 0.181071 s
File: main.py
Function: linearRegressionfit at line 35

Line #      Hits         Time  Per Hit   % Time  Line Contents
==============================================================
    35                                           @profile
    36                                           def linearRegressionfit(Xt,Yt,Xts,Yts):
    37         1         52.0     52.0      0.1      lr=LinearRegression()
    38         1      28942.0  28942.0     75.2      model=lr.fit(Xt,Yt)
    39         1       1347.0   1347.0      3.5      predict=lr.predict(Xts)
    40                                           
    41         1       4924.0   4924.0     12.8      print("train Accuracy",lr.score(Xt,Yt))
    42         1       3242.0   3242.0      8.4      print("test Accuracy",lr.score(Xts,Yts))

以下のためにメモリのプロファイリング

実行:

$ python -m memory_profiler main.py

出力

Filename: main.py

Line #    Mem usage    Increment   Line Contents
================================================
    35  125.992 MiB  125.992 MiB   @profile
    36                             def linearRegressionfit(Xt,Yt,Xts,Yts):
    37  125.992 MiB    0.000 MiB       lr=LinearRegression()
    38  130.547 MiB    4.555 MiB       model=lr.fit(Xt,Yt)
    39  130.547 MiB    0.000 MiB       predict=lr.predict(Xts)
    40                             
    41  130.547 MiB    0.000 MiB       print("train Accuracy",lr.score(Xt,Yt))
    42  130.547 MiB    0.000 MiB       print("test Accuracy",lr.score(Xts,Yts))

また、メモリプロファイラーの結果は、次をmatplotlib使用してプロットすることもできます。

$ mprof run main.py
$ mprof plot

ここに画像の説明を入力してください 注:テスト済み

line_profiler バージョン== 3.0.2

memory_profiler バージョン== 0.57.0

psutil バージョン== 5.7.0



0

@HrabalによるCPU使用法コードに基づいて、これは私が使用するものです:

from subprocess import Popen, PIPE

def get_cpu_usage():
    ''' Get CPU usage on Linux by reading /proc/stat '''

    sub = Popen(('grep', 'cpu', '/proc/stat'), stdout=PIPE, stderr=PIPE)
    top_vals = [int(val) for val in sub.communicate()[0].split('\n')[0].split[1:5]]

    return (top_vals[0] + top_vals[2]) * 100. /(top_vals[0] + top_vals[2] + top_vals[3])

-12

十分にサポートされているマルチプラットフォームライブラリが利用できるとは思いません。Python自体はCで記述されているため、上で提案したように、どのライブラリでも、実行するOS固有のコードスニペットについて賢い判断を下すことを忘れないでください。


1
なぜこの回答は反対投票されたのですか?このステートメントは誤りですか?
EAzevedo

4
psutilは、サポートされているマルチプラットフォームライブラリであり、オペレーションのニーズに
適する
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.