web-dev-qa-db-ja.com

Pythonでハードディスクサイズを取得

Python(macOSでPython 2.7を使用しています)を使用して、ハードドライブのサイズと空き容量を取得しようとしています。

私はos.statvfs('/')で、特に次のコードで試しています。私がやっていることは正しいですか?変数gigaのどの定義を使用しますか?

import os

def get_machine_storage():
    result=os.statvfs('/')
    block_size=result.f_frsize
    total_blocks=result.f_blocks
    free_blocks=result.f_bfree
    # giga=1024*1024*1024
    giga=1000*1000*1000
    total_size=total_blocks*block_size/giga
    free_size=free_blocks*block_size/giga
    print('total_size = %s' % total_size)
    print('free_size = %s' % free_size)

get_machine_storage()

編集:statvfsはPython 3で非推奨になりました。代替案はありますか?

14
Nisba

Pythonは shutil モジュールを提供します。このモジュールには disk_usage 関数。ハードドライブの合計、使用済み、および空き領域の量を含む名前付きタプルを返します。

以下のように関数を呼び出して、ディスクのスペースに関するすべての情報を取得できます。

import shutil

total, used, free = shutil.disk_usage("/")

print("Total: %d GB" % (total // (2**30)))
print("Used: %d GB" % (used // (2**30)))
print("Free: %d GB" % (free // (2**30)))

出力:

Total: 931 GB
Used: 29 GB
Free: 902 GB
30
Vasilis G.

https://pypi.python.org/pypi/psutil

import psutil

obj_Disk = psutil.disk_usage('/')

print (obj_Disk.total / (1024.0 ** 3))
print (obj_Disk.used / (1024.0 ** 3))
print (obj_Disk.free / (1024.0 ** 3))
print (obj_Disk.percent)
13
Fausto Branco

コードはほぼ正しいのですが、間違ったフィールドを使用しているため、別のシステムで間違った結果が得られる可能性があります。正しい方法は次のとおりです。

>>> os.system('df -k /')
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/root       14846608 3247272  10945876  23% /

>>> disk = os.statvfs('/')
>>> (disk.f_bavail * disk.f_frsize) / 1024
10945876L
1
lenik

関数の結果を処理する方法がわからない場合は、型を印刷すると役立ちます。

print type(os.statvfs('/'))は_<type 'posix.statvfs_result'>_を返します

つまり、文字列や整数のような組み込みのクラスインスタンスではありません。

dir(instance)を使用すると、そのインスタンスで何ができるかを確認できます

print dir(os.statvfs('/'))は、すべてのプロパティ、関数、変数を出力します...

_['__add__', '__class__', '__contains__', '__delattr__', '__doc__',
'__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__',
'__getslice__', '__gt__', '__hash__', '__init__', '__le__', '__len__',
'__lt__', '__mul__', '__ne__', '__new__', '__reduce__',
'__reduce_ex__', '__repr__', '__rmul__', '__setattr__', '__sizeof__',
'__str__', '__subclasshook__', 'f_bavail', 'f_bfree', 'f_blocks',
'f_bsize', 'f_favail', 'f_ffree', 'f_files', 'f_flag', 'f_frsize',
'f_namemax', 'n_fields', 'n_sequence_fields', 'n_unnamed_fields']
_

os.statvfs('/').f_ffreeなどの変数の1つにアクセスすることにより、整数を抽出できます。

print type(os.statvfs('/').f_ffree)で再確認すると、_<type 'int'>_が出力されます。

1
Hadus