2016-01-14 9 views
7

में एक नेटवर्क ड्राइव अक्षर से पूर्ण कंप्यूटर का नाम जाओ मैं अजगर का उपयोग कर रहा संग्रहीत फ़ाइलों की संख्या की फ़ाइल रास्ते के साथ एक मेज को भरने के लिए। हालांकि मार्ग है जिसे केवल नहीं ड्राइव अक्षर, पूरे नेटवर्क ड्राइव कंप्यूटर का नाम की जरूरत है यानीअजगर

// ComputerName/फ़ोल्डर/सबफ़ोल्डर/फ़ाइल

नहीं

पी:/फ़ोल्डर/सबफ़ोल्डर/फ़ाइल

मैं win32api, win32file, और os.path मॉड्यूल का उपयोग कर जांच की है लेकिन कुछ भी अपनी यह ऐसा करने में सक्षम की तरह लग रही है। मुझे win32api.GetComputerName() की तरह कुछ चाहिए लेकिन एक ज्ञात ड्राइव अक्षर में तर्क के रूप में छोड़ने की क्षमता के साथ और यह उस कंप्यूटर नाम को वापस कर देता है जो पत्र में मैप किया गया है।

तो कोई ड्राइव अक्षर को देखने और कंप्यूटर का नाम वापस पाने के लिए अजगर में वैसे भी है?

उत्तर

-1

तुम सिर्फ होस्ट नाम की जरूरत है, तो आप socket मॉड्यूल का उपयोग कर सकते हैं:

socket.gethostname() 

या आप os मॉड्यूल का उपयोग कर सकते हैं:

os.uname()[1] 

os.uname() रिटर्न एक 5 टपल जिसमें (sysname, nodename, रिहाई, संस्करण, मशीन)

+0

'socket.gethostname()' कहते हैं कि इसमें 'win32api.GetComputerName() के रूप में बिल्कुल वही बात करने के लिए' प्रकट होता है स्थानीय कंप्यूटर का नाम लौटाता है जिसे मुझे मैप किए गए नेटवर्क ड्राइव का नाम वापस करने में सक्षम होना चाहिए।'uname' 'os' मॉड्यूल में किसी ऑब्जेक्ट के रूप में मौजूद नहीं है। – Cjd111

+0

मुझे लगता है कि 'uname' केवल लिनक्स/यूनिक्स सिस्टम पर उपलब्ध है। लेकिन यह स्थानीय कंप्यूटर नाम भी वापस कर देगा। – linluk

-1

आप net use चलाने के लिए और उत्पादन को पार्स सकता है।

मैं अपने मोबाइल से इस पोस्टिंग कर रहा हूँ, लेकिन मैं इस उत्तर में सुधार करने के लिए जा रहा हूँ जब मैं कोई वास्तविक कंप्यूटर के सामने हूँ।

यहां कुछ लिंक हैं, जो इस दौरान सहायता कर सकते हैं: https://docs.python.org/2/library/subprocess.html#module-subprocess
https://technet.microsoft.com/en-us/library/gg651155.aspx

5

नेटवर्क ड्राइव Windows Networking एपीआई कि mpr.dll द्वारा निर्यात कर रहा है (कई प्रदाता रूटर) का उपयोग कर मैप की जाती हैं। आप WNetAddConnection2 के माध्यम से नेटवर्क ड्राइव बना सकते हैं। स्थानीय डिवाइस से जुड़े दूरस्थ पथ को प्राप्त करने के लिए, WNetGetConnection पर कॉल करें। इस प्रकार आप इस ctypes का उपयोग कर सकते हैं:

import ctypes 
from ctypes import wintypes 

mpr = ctypes.WinDLL('mpr') 

ERROR_SUCCESS = 0x0000 
ERROR_MORE_DATA = 0x00EA 

wintypes.LPDWORD = ctypes.POINTER(wintypes.DWORD) 
mpr.WNetGetConnectionW.restype = wintypes.DWORD 
mpr.WNetGetConnectionW.argtypes = (wintypes.LPCWSTR, 
            wintypes.LPWSTR, 
            wintypes.LPDWORD) 

def get_connection(local_name): 
    length = (wintypes.DWORD * 1)() 
    result = mpr.WNetGetConnectionW(local_name, None, length) 
    if result != ERROR_MORE_DATA: 
     raise ctypes.WinError(result) 
    remote_name = (wintypes.WCHAR * length[0])() 
    result = mpr.WNetGetConnectionW(local_name, remote_name, length) 
    if result != ERROR_SUCCESS: 
     raise ctypes.WinError(result) 
    return remote_name.value 

उदाहरण के लिए:

>>> subprocess.call(r'net use Y: \\live.sysinternals.com\tools') 
The command completed successfully. 
0 
>>> print(get_connection('Y:')) 
\\live.sysinternals.com\tools 
0

मुझे लगता है कि तुम सिर्फ pywin32 ... आप here देख सकते हैं की अधिक से देखने की जरूरत है, वहाँ पहले से ही है एपीआई जो स्थानीय ड्राइव नामों को पूर्ण यूएनसी पथ में परिवर्तित करती है।

पूर्णता के लिए, यहां कुछ कोड है जो मेरे लिए काम करता है।

import win32wnet 
import sys 

print(win32wnet.WNetGetUniversalName(sys.argv[1], 1)) 

और जब मैं इसे चलाने के यह मेरे कुछ इस तरह देता है:

C:\test>python get_unc.py i:\some\path 
\\machine\test_share\some\path