दिलचस्प पोस्ट
HTTP हेडर में "सामग्री-लंबाई" फ़ील्ड क्या है? CodeIgniter: "आप अपलोड करने का प्रयास कर रहे फ़ाइल प्रकार की अनुमति नहीं है।" विशेष अक्षर को जावास्क्रिप्ट में HTML में कनवर्ट करें अग्रणी शून्य के साथ एक जावा स्ट्रिंग को प्रारूपित करने के लिए कैसे? स्थाई तरीकों के माध्यम से साझा किए गए विकल्प को एक्सेस करना फ्लोट्स के लिए रेंज () psycopg2: एक क्वेरी के साथ कई पंक्तियाँ डालें एनजी-बदलाव के लिए विलंब के लिए कोण निर्देश एक्सएमएल सीरियललाइज़ेशन और नेमस्पेस उपसर्ग क्या पॉवरहेल स्क्रिप्ट को डबल क्लिक करके .ps1 फ़ाइल पर काम करने का कोई तरीका है? jQuery। load () कॉल HTML फ़ाइल को लोड किए जाने में जावास्क्रिप्ट निष्पादित नहीं करता है एक्सेल (.XLS और .XLSX) सी # से फ़ाइल बनाएँ पायथन प्रगति पथ – अपरेंटिस से गुरु तक 3D फ़ुलस्क्रीन एप्लिकेशन पर ओवरले करना एचटीएमएल / सीएसएस का इस्तेमाल करते हुए एक छवि के आसपास पाठ कैसे लपेटें

दिए गए फ़ाइल वाले फाइल सिस्टम के आकार और रिक्त स्थान खोजें

मैं लिनक्स पर पायथन 2.6 का उपयोग कर रहा हूँ। सबसे तेज़ तरीका क्या है:

वेब के समाधान से एकत्रित समाधान "दिए गए फ़ाइल वाले फाइल सिस्टम के आकार और रिक्त स्थान खोजें"

यदि आपको फ़ाइल के साथ जुड़े उपकरण का नाम और माउंट बिंदु चाहिए, तो आपको इस जानकारी को प्राप्त करने के लिए बाहरी प्रोग्राम पर कॉल करना चाहिए। 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() 

यदि आपको डिवाइस नाम और माउंट बिंदु की ज़रूरत नहीं है, तो os.statvfs() साथ os.statvfs() बेहतर होगा (अन्य उत्तर देखें)।

यह विभाजन का नाम नहीं देता है, लेकिन आप फाइल सिस्टम आँकड़े सीधे statvfs Unix सिस्टम कॉल का उपयोग कर सकते हैं। इसे अजगर से कॉल करने के लिए, 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) 
 import os def get_mount_point(pathname): "Get the mount point of the filesystem containing pathname" pathname= os.path.normcase(os.path.realpath(pathname)) parent_device= path_device= os.stat(pathname).st_dev while parent_device == path_device: mount_point= pathname pathname= os.path.dirname(pathname) if pathname == mount_point: break parent_device= os.stat(pathname).st_dev return mount_point def get_mounted_device(pathname): "Get the device mounted at pathname" # uses "/proc/mounts" pathname= os.path.normcase(pathname) # might be unnecessary here try: with open("/proc/mounts", "r") as ifp: for line in ifp: fields= line.rstrip('\n').split() # note that line above assumes that # no mount points contain whitespace if fields[1] == pathname: return fields[0] except EnvironmentError: pass return None # explicit def get_fs_freespace(pathname): "Get the free space of the filesystem containing pathname" stat= os.statvfs(pathname) # use f_bfree for superuser, or f_bavail if filesystem # has reserved space for superuser return stat.f_bfree*stat.f_bsize 

मेरे कंप्यूटर पर कुछ नमूना पथनाम:

 path 'trash': mp /home /dev/sda4 free 6413754368 path 'smov': mp /mnt/S /dev/sde free 86761562112 path '/usr/local/lib': mp / rootfs free 2184364032 path '/proc/self/cmdline': mp /proc proc free 0 

पुनश्च

अगर पायथन ≥3.3 पर, वहाँ shutil.disk_usage(path) जो बाइट्स में व्यक्त की गई (total, used, free) नाम के टपल को देता है।

यह आपको जो भी कहा गया है उसे बनाना चाहिए:

 import os from collections import namedtuple disk_ntuple = namedtuple('partition', 'device mountpoint fstype') usage_ntuple = namedtuple('usage', 'total used free percent') def disk_partitions(all=False): """Return all mountd partitions as a nameduple. If all == False return phyisical partitions only. """ phydevs = [] f = open("/proc/filesystems", "r") for line in f: if not line.startswith("nodev"): phydevs.append(line.strip()) retlist = [] f = open('/etc/mtab', "r") for line in f: if not all and line.startswith('none'): continue fields = line.split() device = fields[0] mountpoint = fields[1] fstype = fields[2] if not all and fstype not in phydevs: continue if device == 'none': device = '' ntuple = disk_ntuple(device, mountpoint, fstype) retlist.append(ntuple) return retlist def disk_usage(path): """Return disk usage associated with path.""" st = os.statvfs(path) free = (st.f_bavail * st.f_frsize) total = (st.f_blocks * st.f_frsize) used = (st.f_blocks - st.f_bfree) * st.f_frsize try: percent = ret = (float(used) / total) * 100 except ZeroDivisionError: percent = 0 # NB: the percentage is -5% than what shown by df due to # reserved blocks that we are currently not considering: # http://goo.gl/sWGbH return usage_ntuple(total, used, free, round(percent, 1)) if __name__ == '__main__': for part in disk_partitions(): print part print " %s\n" % str(disk_usage(part.mountpoint)) 

मेरे बॉक्स में प्रिंट के ऊपर कोड:

 giampaolo@ubuntu:~/dev$ python foo.py partition(device='/dev/sda3', mountpoint='/', fstype='ext4') usage(total=21378641920, used=4886749184, free=15405903872, percent=22.9) partition(device='/dev/sda7', mountpoint='/home', fstype='ext4') usage(total=30227386368, used=12137168896, free=16554737664, percent=40.2) partition(device='/dev/sdb1', mountpoint='/media/1CA0-065B', fstype='vfat') usage(total=7952400384, used=32768, free=7952367616, percent=0.0) partition(device='/dev/sr0', mountpoint='/media/WB2PFRE_IT', fstype='iso9660') usage(total=695730176, used=695730176, free=0, percent=100.0) partition(device='/dev/sda6', mountpoint='/media/Dati', fstype='fuseblk') usage(total=914217758720, used=614345637888, free=299872120832, percent=67.2) 

पायथन 3.3 के रूप में, मानक पुस्तकालय के साथ ऐसा करने का एक आसान और सीधा तरीका है:

 ┌─[james@james-desktop] - [~/temp] - [Fri Sep 30, 01:38] └─[$]> cat free_space.py #!/usr/bin/env python3 import shutil total, used, free = shutil.disk_usage(__file__) print(total, used, free) ┌─[james@james-desktop] - [~/temp] - [Fri Sep 30, 01:38] └─[$]> ./free_space.py 1007870246912 460794834944 495854989312 

ये संख्या बाइट्स में हैं अधिक जानकारी के लिए दस्तावेज़ीकरण देखें।

पहले बिंदु के लिए, आप एक कैनोनिकल पथ प्राप्त करने के लिए os.path.realpath का उपयोग करने की कोशिश कर सकते हैं, इसे /etc/mtab (मैं वास्तव में getmntent कॉल करने का सुझाव getmntent , लेकिन मैं इसे एक्सेस करने का एक सामान्य तरीका नहीं मिल सकता है) के खिलाफ जांच कर सकता हूँ सबसे लंबा मैच ढूंढें (यह सुनिश्चित करने के लिए, आपको संभवतः दोनों फाइल और अनुमानित माउंटपॉइंट को सत्यापित करना चाहिए कि वे वास्तव में एक ही उपकरण पर हैं)

दूसरे बिंदु के लिए, ब्लॉक आकार और उपयोग जानकारी प्राप्त करने के लिए os.statvfs का उपयोग करें।

(अस्वीकरण: मैंने इनमें से कोई भी परीक्षण नहीं किया है, जो कि मुझे पता है कि मूल मूल स्रोतों से आया है)

यह पता लगाने का सरलतम तरीका

 import os from collections import namedtuple DiskUsage = namedtuple('DiskUsage', 'total used free') def disk_usage(path): """Return disk usage statistics about the given path. Will return the namedtuple with attributes: 'total', 'used' and 'free', which are the amount of total, used and free space, in bytes. """ st = os.statvfs(path) free = st.f_bavail * st.f_frsize total = st.f_blocks * st.f_frsize used = (st.f_blocks - st.f_bfree) * st.f_frsize return DiskUsage(total, used, free) 

आमतौर पर /proc निर्देशिका में लिनक्स में ऐसी जानकारी है, यह एक आभासी फाइल सिस्टम है। उदाहरण के लिए, /proc/mounts वर्तमान माउंट डिस्क के बारे में जानकारी देता है; और आप इसे सीधे पार्स कर सकते हैं। top तरह उपयोगिताएं, df सभी /proc का उपयोग करते हैं

मैंने इसका इस्तेमाल नहीं किया है, लेकिन यह भी मदद कर सकता है, यदि आप आवरण चाहते हैं: http://bitbucket.org/chrismiles/psi/wiki/Home

 def disk_stat(): import os hd={} disk = os.statvfs('/usr') percent = (disk.f_blocks - disk.f_bfree) * 100 / (disk.f_blocks -disk.f_bfree + disk.f_bavail) + 1 return percent print disk_stat('/') print disk_stat('/data') 

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

 #!/usr/bin/env python import os, sys if len(sys.argv) == 1: Partition_Name = "/dev/sda1" elif len(sys.argv) == 2: Partition_Name = sys.argv[1] else: print("Error: Much more parameter!") exit(0) os.system('clear') #Get each element separately: Partition_Size = os.popen('df -h | grep ' + Partition_Name + ' |awk \'{ print $2 }\'').read() Partition_Used = os.popen('df -h | grep ' + Partition_Name + ' |awk \'{ print $3 }\'').read() Partition_Free = os.popen('df -h | grep ' + Partition_Name + ' |awk \'{ print $4 }\'').read() Partition_UsedPercentage = os.popen('df -h | grep ' + Partition_Name + ' |awk \'{ print $5 }\'').read() Partition_MountPoint = os.popen('df -h | grep ' + Partition_Name + ' |awk \'{ print $6 }\'').read() #Get all elements: AllInOne = os.popen('df -h | grep ' + Partition_Name + ' |awk \'{ print "Size: " $2 "\t" "Used: " $3 "\t" "Free: " $4 "\t" "Use%: " $5 "\t" "Mounted on: " $6 }\'').read() print("Partition Name: %s \n" % Partition_Name) print(" Size: \t\t\t%s Used: \t\t\t%s Free: \t\t\t%s Used Percentage: \t%s" %(Partition_Size, Partition_Used, Partition_Free, Partition_UsedPercentage)) print("All in one: \n" + AllInOne) 

लिनक्स पर परीक्षण:

 chmod +x showdfDetailes.py 

इसे इस्तेमाल करो:

 ./showdfDetailes.py /dev/sda1 

या इसका प्रयोग करें:

 ./showdfDetailes.py 

आउटपुट:

विभाजन का नाम: / dev / sda1

आकार: 235 जी

प्रयुक्त: 3.3 जी

नि: शुल्क: 220 जी

प्रयुक्त प्रतिशत: 2%

ऑल – इन – वन:

आकार: 235 जी उपयोग किया गया: 3.3 जी नि: शुल्क: 220G का उपयोग करें%: 2% पर माउंटेड: /