2009-07-16 14 views
5

मुझे यह निर्धारित करने के लिए एक फ़ंक्शन चाहिए कि कोई निर्देशिका ड्राइव के लिए माउंट पॉइंट है या नहीं। मैं इस कोड को पहले से ही जो लिनक्स के लिए अच्छी तरह से काम मिल गया:पायथन: विंडोज या लिनक्स पर माउंट प्वाइंट प्राप्त करें

def getmount(path): 
    path = os.path.abspath(path) 
    while path != os.path.sep: 
    if os.path.ismount(path): 
     return path 
    path = os.path.abspath(os.path.join(path, os.pardir)) 
    return path 

लेकिन मुझे यकीन है कि मैं यह कैसे प्राप्त खिड़कियों पर काम करने के लिए नहीं कर रहा हूँ। क्या मैं बस मानता हूं कि माउंट पॉइंट ड्राइव अक्षर है (उदा। सी :)? मेरा मानना ​​है कि विंडोज़ पर नेटवर्क माउंट करना संभव है, इसलिए मैं उस माउंट को भी पहचानने में सक्षम होना चाहता हूं।

+1

विंडोज़ में ड्राइव के भीतर एक ड्राइव पर एक ड्राइव पर चढ़ना संभव है। मुझे लगता है कि यह कैसे करना है इसके बारे में बेहतर विचार पाने के लिए आपको pywin32 में देखना होगा। –

उत्तर

3

विंडोज उन्हें फोन करने के लिए उपयोग नहीं किया "माउंट पॉइंट" [संपादित: यह अब है, नीचे देखें!], और दो विशिष्ट/पारंपरिक वाक्यविन्यास ताकि वे भी कर रहे हैं के लिए एक ड्राइव अक्षर है, उदा पा सकते हैं Z:, या अन्य \\hostname (दो प्रमुख बैकस्लाश के साथ: सावधानी से बचें या पाइथन एफआरआर जैसे शाब्दिक तारों में r'...' नोटेशन का उपयोग करें)।

संपादित: के बाद से NTFS 5.0 माउंट अंक का समर्थन कर रहे हैं, लेकिन this post के अनुसार उनके लिए एपीआई काफी स्थिति में है - "टूटे और बीमार से प्रलेखित", पोस्ट के शीर्षक कहते हैं। हो सकता है कि माइक्रोसॉफ्ट द्वारा आपूर्ति mountvol.exe निष्पादित करना कम से कम दर्दनाक तरीका है - mountvol drive:path /L निर्दिष्ट पथ के लिए घुड़सवार वॉल्यूम नाम को उत्सर्जित करना चाहिए, या केवल mountvol ऐसी सूची सभी ऐसी माउंट्स (मुझे कहना चाहिए "चाहिए" क्योंकि मैं अभी जांच नहीं कर सकता)। आप इसे subprocess.Popen के साथ निष्पादित कर सकते हैं और इसके आउटपुट की जांच कर सकते हैं।

+0

यह * संभव है कि एक और ड्राइव के भीतर एक वॉल्यूम घुड़सवार हो (हालांकि मुझे यकीन नहीं है कि यह सही शब्दावली है)। –

+0

हाँ, यह है, मुझे तदनुसार संपादित करने दें। –

3

क्या आप माउंट पॉइंट ढूंढना चाहते हैं या बस यह निर्धारित करना चाहते हैं कि यह एक माउंट पॉइंट है या नहीं?

भले ही ऊपर टिप्पणी की गई है, WinXP में किसी फ़ोल्डर में लॉजिकल ड्राइव को मैप करना संभव है।

जानकारी के लिए यहाँ देखें: http://www.modzone.dk/forums/showthread.php?threadid=278

मैं win32api.GetVolumeInformation

>>> import win32api 
>>> win32api.GetVolumeInformation("C:\\") 
    ('LABEL', 1280075370, 255, 459007, 'NTFS') 
>>> win32api.GetVolumeInformation("D:\\") 
    ('CD LABEL', 2137801086, 110, 524293, 'CDFS') 
>>> win32api.GetVolumeInformation("C:\\TEST\\") # same as D: 
    ('CD LABEL', 2137801086, 110, 524293, 'CDFS') 
>>> win32api.GetVolumeInformation("\\\\servername\\share\\") 
    ('LABEL', -994499922, 255, 11, 'NTFS') 
>>> win32api.GetVolumeInformation("C:\\WINDOWS\\") # not a mount point 
    Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    pywintypes.error: (144, 'GetVolumeInformation', 'The directory is not a subdirectory of the root directory.') 
+0

एनबी कि win32api अलग से स्थापित पैकेज से है http://sourceforge.net/projects/pywin32/files/ आपके उत्तर के लिए धन्यवाद - यह मुझे यह भी पता चला कि डीवीडी डिस्क पतंग कैसे प्राप्त करें – rogerdpack

0

कोशिश करेगा यहाँ यूएनसी पथ पर लौटने के लिए कुछ कोड ड्राइव अक्षर द्वारा की ओर इशारा किया है। मुझे लगता है कि ऐसा करने के लिए एक और अधिक आसान तरीका है, लेकिन मैंने सोचा कि मैं अपना छोटा सा हिस्सा योगदान दूंगा।

import sys,os,string,re,win32file 
for ch in string.uppercase: # use all uppercase letters, one at a time 
    dl = ch + ":" 
    try: 
     flds = win32file.QueryDosDevice(dl).split("\x00") 
    except: 
     continue 
    if re.search('^\\\\Device\\\\LanmanRedirector\\\\',flds[0]): 
     flds2 = flds[0].split(":") 
    st = flds2[1] 
    n = st.find("\\") 
    path = st[n:] 
     print(path) 
संबंधित मुद्दे