Python 3.3 では、標準ライブラリを使用してこれを行う簡単で直接的な方法があります:
$ cat free_space.py
#!/usr/bin/env python3
import shutil
total, used, free = shutil.disk_usage(__file__)
print(total, used, free)
$ ./free_space.py
1007870246912 460794834944 495854989312
これらの数値はバイト単位です。詳細については、ドキュメントを参照してください。
これはパーティションの名前を示しませんが、 statvfs
を使用してファイルシステムの統計を直接取得できます Unix システムコール。 Python から呼び出すには、os.statvfs('/home/foo/bar/baz')
を使用します。 .
POSIX に従った結果の関連フィールド:
unsigned long f_frsize Fundamental file system block size. fsblkcnt_t f_blocks Total number of blocks on file system in units of f_frsize. fsblkcnt_t f_bfree Total number of free blocks. fsblkcnt_t f_bavail Number of free blocks available to non-privileged process.
したがって、値を理解するには、f_frsize
を掛けます。 :
import os
statvfs = os.statvfs('/home/foo/bar/baz')
statvfs.f_frsize * statvfs.f_blocks # Size of filesystem in bytes
statvfs.f_frsize * statvfs.f_bfree # Actual number of free bytes
statvfs.f_frsize * statvfs.f_bavail # Number of free bytes that ordinary users
# are allowed to use (excl. reserved space)
デバイスの空き容量だけが必要な場合は、os.statvfs()
を使用して回答を参照してください
ファイルに関連付けられたデバイス名とマウント ポイントも必要な場合は、外部プログラムを呼び出してこの情報を取得する必要があります。 df
df filename
として呼び出されると、必要なすべての情報が提供されます。 ファイルを含むパーティションに関する行を出力します。
例を挙げると:
import subprocess
df = subprocess.Popen(["df", "filename"], stdout=subprocess.PIPE)
output = df.communicate()[0]
device, size, used, available, percent, mountpoint = \
output.split("\n")[1].split()
df
の正確な形式に依存するため、これはかなり脆弱であることに注意してください。 出力しますが、より堅牢なソリューションを認識していません。 (/proc
に依存するソリューションがいくつかあります その下のファイルシステムは、このファイルシステムよりもさらに移植性が低くなります。)