使用python的卷上剩余的跨平台空间

python windows linux macos diskspace

35368 观看

11回复

0 作者的声誉

我需要一种在Linux,Windows和OS X上使用python来确定磁盘卷上剩余空间的方法。我目前正在解析各种系统调用(df,dir)的输出以实现此目的-有更好的方法吗?

作者: Justin Waddell 的来源 发布者: 2008 年 9 月 9 日

回应 (11)


2

708713 作者的声誉

os.statvfs()函数是一个更好的方式来获得这些信息的类Unix平台(包括OS X)。Python文档说“ Availability:Unix”,但值得一看的是,在您构建的Python版本中,它是否也可以在Windows上运行(即,文档可能不是最新的)。

否则,您可以使用pywin32库直接调用GetDiskFreeSpaceEx函数。

作者: Greg Hewgill 发布者: 09.09.2008 11:40

0

6487 作者的声誉

我不知道有任何跨平台的方法来实现这一目标,但是对于您来说,一个不错的解决方法是编写一个包装类,该类检查操作系统并为每个操作系统使用最佳方法。

对于Windows,win32扩展中包含GetDiskFreeSpaceEx方法。

作者: hasseg 发布者: 09.09.2008 11:47

2

286637 作者的声誉

您可以将df用作跨平台方式。它是GNU核心实用程序的一部分。这些是预期在每个操作系统上都存在的核心实用程序。但是,默认情况下它们未安装在Windows上(在这里,GetGnuWin32会派上用场)。

df是一个命令行实用程序,因此是编写脚本所需的包装。例如:

from subprocess import PIPE, Popen

def free_volume(filename):
    """Find amount of disk space available to the current user (in bytes) 
       on the file system containing filename."""
    stats = Popen(["df", "-Pk", filename], stdout=PIPE).communicate()[0]
    return int(stats.splitlines()[1].split()[3]) * 1024
作者: jfs 发布者: 09.09.2008 11:48

6

975 作者的声誉

如果您不想添加其他依赖项,则可以为Windows使用ctypes直接调用win32函数调用。

import ctypes

free_bytes = ctypes.c_ulonglong(0)

ctypes.windll.kernel32.GetDiskFreeSpaceExW(ctypes.c_wchar_p(u'c:\\'), None, None, ctypes.pointer(free_bytes))

if free_bytes.value == 0:
   print 'dont panic'
作者: Stefan Lundström 发布者: 13.11.2009 09:22

74

2549 作者的声誉

import ctypes
import os
import platform
import sys

def get_free_space_mb(dirname):
    """Return folder/drive free space (in megabytes)."""
    if platform.system() == 'Windows':
        free_bytes = ctypes.c_ulonglong(0)
        ctypes.windll.kernel32.GetDiskFreeSpaceExW(ctypes.c_wchar_p(dirname), None, None, ctypes.pointer(free_bytes))
        return free_bytes.value / 1024 / 1024
    else:
        st = os.statvfs(dirname)
        return st.f_bavail * st.f_frsize / 1024 / 1024

请注意,您必须传递目录名称GetDiskFreeSpaceEx()才能使用(statvfs()在文件和目录上均有效)。您可以使用从文件中获取目录名称os.path.dirname()

另请参阅文件os.statvfs()GetDiskFreeSpaceEx

作者: Frankovskyi Bogdan 发布者: 03.03.2010 02:45

5

51 作者的声誉

一种跨平台的好方法是使用psutil:http ://pythonhosted.org/psutil/#disks (请注意,您将需要psutil 0.3.0或更高版本)。

作者: Yuriy 发布者: 21.07.2011 09:02

23

993 作者的声誉

您可以将wmi模块用于Windows,将os.statvfs用于UNIX

用于窗户

import wmi

c = wmi.WMI ()
for d in c.Win32_LogicalDisk():
    print( d.Caption, d.FreeSpace, d.Size, d.DriveType)

对于Unix或Linux

from os import statvfs

statvfs(path)
作者: Erxin 发布者: 12.10.2013 09:20

24

1167 作者的声誉

使用安装psutilpip install psutil。然后,您可以使用以下命令获取可用空间(以字节为单位):

import psutil
print(psutil.disk_usage(".").free)
作者: jhasse 发布者: 29.04.2015 12:43

1

445 作者的声誉

下面的代码在Windows上返回正确的值

import win32file    

def get_free_space(dirname):
    secsPerClus, bytesPerSec, nFreeClus, totClus = win32file.GetDiskFreeSpace(dirname)
    return secsPerClus * bytesPerSec * nFreeClus
作者: Sanjay Bhosale 发布者: 08.03.2016 06:53

5

1486 作者的声誉

在Python 3.3中,您可以从Windows和UNIX的标准库中使用shutil.disk_usage(“ /”)。free:)

作者: Mišo 发布者: 11.08.2016 07:11

8

1662 作者的声誉

如果您正在运行python3:

shutil.disk_usage()os.path.realpath('/')名称正则化一起使用:

from os import path
from shutil import disk_usage

print([i / 1000000 for i in disk_usage(path.realpath('/'))])

要么

total_bytes, used_bytes, free_bytes = disk_usage(path.realpath('D:\\Users\\phannypack'))

print(total_bytes / 1000000) # for Mb
print(used_bytes / 1000000)
print(free_bytes / 1000000)

为您提供总空间,已用空间和可用空间(以MB为单位)。

作者: Rob Truxal 发布者: 01.02.2018 04:52
32x32