Межплатформенный остаток производства на объеме с помощью Python

PHP - 59 символов

function f($n){return array_reduce(range(1,$n),'bcmul',1);}
<час>

Улучшенная версия - 27 символов

array_product(range(1,$n));
70
задан 9 September 2008 в 11:36
поделиться

2 ответа

Если вы не хотите добавлять другую зависимость, вы можете для 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'
6
ответ дан 24 November 2019 в 13:22
поделиться
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.

74
ответ дан 24 November 2019 в 13:22
поделиться