Python:访问具有已知URL但未知驱动器号的Windows映射网络驱动器

dpi*_*h40 5 python

我正在尝试编写一个可以在远程Linux服务器上移动和复制文件的Python脚本.但是,我不能假设每个运行脚本的人(在Windows上)都会将此服务器映射到同一个字母.我想通过其网络URL(驱动器号映射到的网络URL)来访问服务器,而不是提示用户输入正确的字母.因此,例如,如果我已映射服务器的URL

\\name-of-machine.site.company.com
Run Code Online (Sandbox Code Playgroud)

要驱动S:\,我想以驱动器号不可知的方式访问文件S:\ var\SomeFile.txt.我环顾四周,一般建议似乎是使用UNC表示法:

f = open(r"\\name-of-machine.site.company.com\var\SomeFile.txt", "w")
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试这个,一个IOError说没有这样的文件或目录.如果我尝试使用服务器的IP地址(而不是真实地址,但类似):

f = open(r"\\10.1.123.149\var\SomeFile.txt", "w")
Run Code Online (Sandbox Code Playgroud)

经过长时间的停顿后,我得到一个IO错误:"无效模式('w')或文件名".为什么这些符号不起作用,如何通过其URL访问此服务器(理想情况下,就像它是本地驱动器一样)?

Jun*_*uxx 5

不是一个非常优雅的解决方案,但你可以尝试所有的驱动器?

这里:

import win32api

drives = win32api.GetLogicalDriveStrings()
drives = drives.split('\000')[:-1]
print drives
Run Code Online (Sandbox Code Playgroud)

然后你可以os.path.exists()在每个驱动器上使用:\ var\SomeFile.txt,直到你找到合适的驱动器.


UnN*_*ral 5

简单的解决方案是使用正斜杠来指定通用名称约定(UNC):

//HOST/share/path/to/file
Run Code Online (Sandbox Code Playgroud)

在另一个线程中找到了这个解决方案并认为它在这里是相关的.见下面的原始主题:

使用Python,我如何访问Windows网络上的共享文件夹?