2017-07-07 12 views
10

Nếu tôi sử dụng sau đây để có được danh sách của tất cả các ổ đĩa kết nối:Python 2: Nhận con đường cổ phần mạng từ ký tự ổ đĩa

available_drives = ['%s:' % d for d in string.ascii_uppercase if os.path.exists('%s:' % d)] 

Làm thế nào để lấy đường dẫn UNC của ổ đĩa được kết nối?

os.path chỉ trả z:\ thay vì

+0

Lưu ý: Tôi không cố gắng thực hiện này. https://docs.python.org/2/library/os.path.html Dựa trên điều này, "Lưu ý Trên Windows, nhiều chức năng này không hỗ trợ đúng tên đường dẫn UNC. splitunc() và ismount() xử lý chúng một cách chính xác ". os.path.splitunc (đường dẫn) Chia đường dẫn pathname thành một cặp (unc, rest) để unc là điểm gắn UNC (như r '\\ host \ mount'), nếu có, và phần còn lại của đường dẫn (chẳng hạn như r '\ path \ file.ext'). Đối với các đường dẫn có chứa ký tự ổ đĩa, chữ sẽ luôn là chuỗi rỗng. – prashanth

+0

Thử thư viện sau trong bài đăng trên blog. http://developer.covenanteyes.com/unc-paths-with-python/ Liên kết đến thư viện http://covenanteyes.github.io/py_win_unc/ – prashanth

+0

được một thời gian kể từ khi tôi làm điều này, nhưng iirc cách tôi tìm thấy là gọi 'net show' (sp?) và phân tích cú pháp đầu ra ... không có bất kỳ cửa sổ nào gần đó để thử ngay bây giờ ... –

Trả lời

6

Sử dụng win32wnet từ PyWin32 để chuyển đổi ký tự ổ đĩa của bạn. Ví dụ:

import win32wnet 
import sys 

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

này mang lại cho tôi một cái gì đó như thế này khi tôi chạy nó:

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

Sử dụng ctypes và mã thể hiện trong câu trả lời đầu tiên trong bài viết này: Get full computer name from a network drive letter in python, nó có thể để có được các đường dẫn ổ đĩa cho mỗi ổ đĩa mạng, hoặc một vài lựa chọn.

Chức năng get_connection nhất định sẽ ném ra một lỗi nếu ổ đĩa không phải là một ổ đĩa mạng, ổ đĩa địa phương hoặc tháo rời, điều này có thể được giải thích với

# your drive list 
available_drives = ['%s:' % d for d in string.ascii_uppercase if os.path.exists('%s:' % d)] 
for drive in available_drives: 
    try: 
     # function from linked post 
     print(get_connection(drive)) 
    except WindowsError: # thrown from local drives 
     print('{} is a local drive'.format(drive)) 
Các vấn đề liên quan