通过 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)
pushd
和 popd
在 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 程序访问网络文件夹的主要内容,如果未能解决你的问题,请参考以下文章