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

时间:2012-10-04 14:52:28

标签: python

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

\\name-of-machine.site.company.com

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

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

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

f = open(r"\\10.1.123.149\var\SomeFile.txt", "w")

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

4 个答案:

答案 0 :(得分:5)

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

来自here

import win32api

drives = win32api.GetLogicalDriveStrings()
drives = drives.split('\000')[:-1]
print drives

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

答案 1 :(得分:5)

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

//HOST/share/path/to/file

在另一个帖子中找到了这个解决方案,觉得它在这里是相关的。请参阅下面的原始主题:

Using Python, how can I access a shared folder on windows network?

答案 2 :(得分:0)

尝试使用短名称而不是完全限定名称。在您的示例中,\\name-of-machine\var\SomeFile.txt

编辑:

好的,现在我觉得自己像个假人 - 希望你能和我一个感觉! ;)

机器名称为name-of-machine.site.company.com,文件夹和文件名为\var\SomeFile.txt - 共享名称是什么?换句话说,您的路径应该是:

\\name-of-machine.site.company.com\share_name\var\SomeFile.txt

答案 3 :(得分:0)

如果您可以为此任务保留驱动器号,并且您具有权限,则可以从python运行“net use ...”,然后使用该固定驱动器号来读取/写入文件。

http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/net_use.mspx?mfr=true