【问题标题】:How to write to a Windows network share from a batch file?如何从批处理文件写入 Windows 网络共享?
【发布时间】:2014-10-01 18:21:21
【问题描述】:

我在本地机器上有一个批处理脚本,它调用 Windows 网络共享上的 Python 脚本,应该在那里写一个文件。如果我在没有批处理文件的情况下运行 Python 脚本,它将成功运行。如果我运行批处理文件,我会收到此错误:

Traceback (most recent call last):
File "python_script.py", line 25 in <module>
 IOError: [Errno 13] Permission denied: 'outfile.txt'

Python 脚本与“outfile.txt”位于同一目录中。

以下是 Python 脚本中的代码:

outfile = open("outfile.txt", "w")    

我也试过绝对路径,但是我得到一个错误“找不到文件”:

outfile = open("\\server\folder\subfolder\outfile.txt", "w")

我认为这不是权限问题,因为如果我只是以同一用户身份“手动”运行 python 脚本,它会将输出文件写入网络共享。使用批处理文件我缺少什么?

【问题讨论】:

    标签: python windows batch-file


    【解决方案1】:

    当您“调用”python 脚本时,实际上是从当前目录执行它。因为我不认为你可以 cd 到网络共享而不映射它,这可能会导致权限问题。

    绝对路径可以使用,但您只需要正确指定路径。在 python 中,反斜杠是转义字符,因此您必须转义反斜杠或使用正斜杠:

    outfile = open("//server/folder/subfolder/outfile.txt", "w")
    

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

    【讨论】:

    • 感谢@nullability,现在它写入了输出文件。但是现在我在打开输入文件时遇到了问题。我正在使用正斜杠,这是 os.listdir 的限制吗? files = [file for file in os.listdir('//server/subfolder/folder') if os.path.isfile(file)] for file in files: if filename_pattern.search(file): print file
    • 手动运行脚本时,我正在阅读的目录的绝对路径有效。同样,在运行批处理文件时,它找不到要读取的文件。奇怪的是没有错误,它只是写了一个空的outfile。
    • 你能展示你的批处理文件以及你是如何运行它的吗?
    • 实际上您可以使用原始字符串,这样您就不必转义反斜杠:outfile = open(r"\\server\folder\subfolder\outfile.txt", "w")。注意路径字符串开头的r。
    • bat文件有一行:call "\\server\subfolder\folder\script.exe"(我编译成exe)。我有一个运行的打印语句,所以我知道程序正在运行,但它写入了一个空白的输出文件。我可能需要记录一个新问题,因为我使用的是 os.listdir 而不是 Open
    猜你喜欢
    • 2010-10-27
    • 1970-01-01
    • 2011-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-31
    相关资源
    最近更新 更多