6

我正在尝试编写一个可以在远程 Linux 服务器上移动和复制文件的 Python 脚本。但是,我不能假设每个运行脚本(在 Windows 上)的人都会将此服务器映射到同一个字母。与其提示用户输入正确的字母,我只想通过其网络 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

4 回答 4

6

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

//HOST/share/path/to/file

在另一个线程中找到了这个解决方案,并认为它在这里是相关的。请参阅下面的原始线程:

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

于 2014-06-16T21:48:43.940 回答
5

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

这里

import win32api

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

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

于 2012-10-04T15:54:53.457 回答
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
于 2012-10-04T14:58:43.110 回答
0

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

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

于 2012-10-04T15:01:55.620 回答