通过 python 程序访问网络文件夹

Posted

技术标签:

【中文标题】通过 python 程序访问网络文件夹【英文标题】:Accessing a network folder through a python program 【发布时间】:2017-11-29 07:52:28 【问题描述】:

我正在做的只是一个简短的概述:我正在尝试在网络目录中使用 python 自动执行一些 pdf 合并例程,这涉及在特定网络位置复制、删除和创建文件。抱歉,如果我的语言不是很精确。

我在 Windows 7 上使用 python 3.6 进行编码。该程序需要在其他机器上分发,因此本地和临时修复可能无济于事。我编写的代码功能齐全,适用于所有本地文件夹和文件,但是,现在我需要在网络上使用它,访问我需要的文件夹时遇到了一些困难。

这是我尝试过的:

os.system("pushd " + "\\" + "\\netWorkDrive\Reports")  
check_output("pushd " + "\\" + "\\netWorkDrive\Reports", shell=True)

pushdpopd 在 cmd 中输入时工作正常,但是当我通过 python 进行系统调用时,它们只是不通过。我发送了一个系统调用,它运行正常,但是当我“cd”一个当前目录时,它表明我仍然在我以前的目录中。如果通过 cmd 手动完成,一切都会按预期进行。我已经用谷歌搜索了这个问题,但最终没有找到任何工作/有用的东西。我真的很感激任何建议,如果我需要进一步澄清我的问题,请告诉我。

谢谢!

【问题讨论】:

可能是很多东西。驱动器有全局地址吗?而不是本地映射的“字母”? (例如,大型企业 Intranet 网络有一个全局地址,员工通常会将其映射到他们自己的“N:”(或任何字母)驱动器。尝试使用整体地址。此外,尝试通过以 'r 开头的字符串访问驱动器' 因此:r'C:/Users/Vlox/Stuff' r 表示原始字符串,因此可以正确读取斜杠(通常它们是可能导致您的问题的python转义字符)。或者,将反斜杠加倍'C://Users//Vlox//Stuff' 我相信我使用的是全局地址,因为其他人都在使用它来访问网络“\\ourFolderName\reports”。据我了解,popd 将为我创建一个临时驱动器,但我还没有到那个阶段。我输入斜杠的方式已经考虑了转义字符,因为我已经测试了一个带有路径名的字符串,但我仍然尝试了 'r",不幸的是这没有帮助。 PUSHD 可能工作正常。但是,当创建的 shell 退出时,您将返回到现有进程,该进程仍然具有调用 os.system() 之前的 cwd。 我也是这么想的,因为我已经在其他相关问题中看到了它的解释。但是,我在程序运行后手动检查,并没有创建临时驱动器。 【参考方案1】:

我不会以这种方式使用 pushd/popd,我只会在我需要执行的任何文件操作的路径中包含完整路径,包括网络路径

但是,如果我真的需要更改工作目录,我会使用 python:

import os

original_working_directory = os.getcwd()

# do stuff

new_networked_directory = r'\\server\share\folder'
# change to the networked directory
os.chdir(new_networked_directory)

# do stuff

#changeback to original working directory
os.chdir(original_working_directory)

# do more stuff

真的不需要“临时驱动器”或类似的东西。

【讨论】:

这是我最初开始的地方,我被无法直接通过cmd访问服务器的事实所困扰,但实际上我什至不必!谢谢!

以上是关于通过 python 程序访问网络文件夹的主要内容,如果未能解决你的问题,请参考以下文章

我们能否使 Worklight 控制台只能通过内部网络访问

如何验证网络文件夹访问

python 爬取网络小说 清洗 并下载至txt文件

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

网络运维——访问共享的三种方式

2017.07.24 Python网络爬虫之urllib2修改Header