使用Python访问远程服务器上的Windows共享驱动器

时间:2012-10-04 20:01:23

标签: python windows shared-directory

这似乎是一个简单的问题,但我无法搞清楚。

我在远程服务器上设置了一个共享文件夹,以便该文件夹显示在Windows资源管理器中,如下所示:\\ server-name \ shared-directory。我可以远程从该文件夹中读取并通过Windows资源管理器远程写入该文件夹。但是,当我尝试通过python脚本访问该文件时,我说该目录不存在。

我拥有服务器的管理权限,并允许自己访问共享驱动器(我通过Windows资源管理器复制文件验证了这一点。)

在python中,我按如下方式访问驱动器(尽管我尝试了几种不同的方法但没有成功):

os.access('\\\\server-name\\path-to-shared-directory', os.W_OK)

有关我可能做错的任何建议吗?

编辑:

在回答问题时,我实际上是在尝试使用脚本复制文件,os.access只是用来查看目录是否具有写访问权限。我使用的复制代码如下:

def copy_folder(src, dest):
    if not os.access(dest, os.W_OK):
        return(False)
    cmd = ['xcopy', '/E', '/J', '/Y', '/I', src, dest]

    p = subprocess.Popen(args=cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)

    out, err = p.communicate()

    print 'out: %s' % out
    print 'err: %s' % err

    return(True)

copy_folder(my_source_directory, '\\\\server-name\\path-to-shared-directory')

这会将“无效的驱动器规格”作为错误返回。

1 个答案:

答案 0 :(得分:2)

通过您尝试使用的UNC路径访问文件应该没有问题,但我建议将其格式化一些以帮助转义:

src  = r'C:\path\to\source'
dest = r'\\server-name\path-to-shared-directory'

您不需要stdin

p = subprocess.Popen(cmd, 
        stdout=subprocess.PIPE, 
        stderr=subprocess.PIPE, 
        shell=True)

通常你可以在python中使用正斜杠作为路径,但是因为你正在调用shell命令,所以仍然需要反斜杠。