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で非推奨になりました。代替案はありますか?
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
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)
コードはほぼ正しいのですが、間違ったフィールドを使用しているため、別のシステムで間違った結果が得られる可能性があります。正しい方法は次のとおりです。
>>> 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
関数の結果を処理する方法がわからない場合は、型を印刷すると役立ちます。
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'>
_が出力されます。