7

私はpythonを使用して、保存されている多数のファイルのファイルパスをテーブルに入力しています。ただし、経路には、ドライブ文字だけでなく完全なネットワーク ドライブ コンピュータ名が必要です。つまり、

//コンピュータ名/フォルダ/サブフォルダ/ファイル

いいえ

P:/フォルダ/サブフォルダ/ファイル

win32api、win32file、および os.path モジュールを使用して調査しましたが、それができるようには見えません。ようなものwin32api.GetComputerName()が必要ですが、既知のドライブ文字を引数としてドロップする機能があり、文字にマップされているコンピューター名を返します。

それで、ドライブ文字を調べてコンピュータ名を取り戻すためにPythonにとにかくありますか?

4

5 に答える 5

7

ネットワーク ドライブは、mpr.dll (複数プロバイダー ルーター) によってエクスポートされるWindows ネットワークAPI を使用してマップされます。経由でネットワーク ドライブを作成できます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
于 2016-01-15T10:45:44.347 に答える
-1

ホスト名だけが必要な場合は、socketモジュールを使用できます。

socket.gethostname()

または、次のosモジュールを使用することもできます。

os.uname()[1]

os.uname()(sysname、nodename、release、version、machine) を含む 5 つのタプルを返します

于 2016-01-14T23:32:14.430 に答える