दिलचस्प पोस्ट
स्विफ्ट पैरामीटर में डिफ़ॉल्ट कीवर्ड वैश्विक चर चर उद्देश्य सी फ़ंक्शन को हर 60 सेकंड कॉल करना मैं जावास्क्रिप्ट में ऑटोरेटेड किडेडाउन इवेंट्स से कैसे बच सकता हूं? धागा सिंक्रनाइज़ेशन करने के लिए लॉक के रूप में स्ट्रिंग का उपयोग करना पायथन इंटरैक्टिव सत्र को कैसे सहेजना है? पायथन में मूल्यों को पास करना Intent.ACTION_GET_CONTENT से फाइल में यूआरआई कक्षा और उदाहरण तरीकों के बीच का अंतर VBA में समय देरी @ प्रॉपर्टी और उद्देश्य- सी में असाइन, प्रतिलिपि, नॉनैटॉमिक, बनाए रखें कैसे iPhone एसडीके में गोल कोनों के साथ एक छवि में एक वर्ग छवि नकाब करने के लिए? एंड्रॉइड पर asynctask के साथ वेबदृश्य सीएसएस में क्या मतलब है? मैं DateTimePicker नियंत्रण पर कुछ दिनांक कैसे अक्षम करूं?

अजगर का उपयोग करके वॉल्यूम पर क्रॉस-प्लेटफॉर्म स्थान शेष है

मुझे लिनक्स, विंडोज और ओएस एक्स पर अजगर का इस्तेमाल करते हुए डिस्क वॉल्यूम पर शेष स्थान निर्धारित करने की आवश्यकता है। मैं इसे पूरा करने के लिए वर्तमान में विभिन्न सिस्टम कॉल्स (डीएफ, डीआईआर) के आउटपुट को पार्स कर रहा हूं – क्या कोई बेहतर तरीका है?

Solutions Collecting From Web of "अजगर का उपयोग करके वॉल्यूम पर क्रॉस-प्लेटफॉर्म स्थान शेष है"

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 लिए दस्तावेज़ीकरण भी देखें।

आप यूनिक्स के लिए विंडो और os.statvfs के लिए wmi मॉड्यूल का उपयोग कर सकते हैं

खिड़की के लिए

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

यूनिक्स या लिनक्स के लिए

 from os import statvfs statvfs(path) 

Psutil का उपयोग करके पीओआईटी इंस्टॉल करें। इसके बाद आप बाइट्स में रिक्त स्थान की मात्रा का उपयोग कर प्राप्त कर सकते हैं:

 import psutil print(psutil.disk_usage(".").free) 

यदि आप किसी अन्य निर्भरता को जोड़ना पसंद नहीं करते हैं, तो आप Windows के लिए सीआईटीपीज़ का उपयोग कर सीधे 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' 

एक अच्छा क्रॉस-प्लेटफ़ॉर्म तरीका psutil का उपयोग कर रहा है: http://pythonhosted.org/psutil/#disks (ध्यान दें कि आपको psutil 0.3.0 या ऊपर की आवश्यकता होगी)।

पायथन 3.3 से आप shutil.disk_usage ("/") का उपयोग कर सकते हैं । विंडोज़ और यूनिक्स दोनों के लिए मानक पुस्तकालय से मुफ़्त है 🙂

ओएसएसटीएफएफएस () फ़ंक्शन यूनिक्स जैसी प्लैटफॉर्म (ओएस एक्स सहित) के लिए उस जानकारी को प्राप्त करने का एक बेहतर तरीका है। पायथन प्रलेखन "उपलब्धता: यूनिक्स" कहते हैं लेकिन यह जांचने योग्य है कि यह आपके पायथन के निर्माण में भी विंडोज पर काम करता है (यानी डॉक्स, आज तक नहीं हो सकता है)।

अन्यथा, आप pywin32 लाइब्रेरी का उपयोग सीधे GetDiskFreeSpaceEx फ़ंक्शन को कॉल कर सकते हैं।

आप डीएफ को एक क्रॉस-प्लेटफ़ॉर्म तरीके से उपयोग कर सकते हैं। यह जीएनयू कोर उपयोगिताओं का एक हिस्सा है ये मुख्य उपयोगिताओं हैं जो हर ऑपरेटिंग सिस्टम पर मौजूद होने की संभावना है। हालांकि, वे डिफ़ॉल्ट रूप से विंडोज पर स्थापित नहीं हैं (यहां, 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 

नीचे कोड विंडो पर सही मान देता है

 import win32file def get_free_space(dirname): secsPerClus, bytesPerSec, nFreeClus, totClus = win32file.GetDiskFreeSpace(dirname) return secsPerClus * bytesPerSec * nFreeClus 

मैं इसे प्राप्त करने के लिए किसी भी क्रॉस-प्लेटफॉर्म के बारे में नहीं जानता, लेकिन शायद आपके लिए एक अच्छा काम करने वाला एक आवरण वर्ग लिखना होगा जो ऑपरेटिंग सिस्टम की जांच करता है और प्रत्येक के लिए सर्वोत्तम विधि का उपयोग करता है।

Windows के लिए, Win32 एक्सटेंशन में GetDiskFreeSpaceEx विधि है