【问题标题】:Errno 2 using python shutil.py No such file or directory for file destinationErrno 2 using python shutil.py No such file or directory for file destination
【发布时间】:2015-10-20 00:14:55
【问题描述】:

我正在使用shutil python模块在linux redhat机器上复制文件和目录。

我编写了以下方法,它接受 2 个参数:src(正在收集的文件或目录的路径)和目标(将收集的日志/目录粘贴到的所需新路径)。

def copy(src, destination):
    if(os.path.exists(src)):
        if(os.path.isdir(src)):
            if(os.path.exists(destination)):
                shutil.copytree(src, destination+getTimeStamp())
            else:
                shutil.copytree(src, destination)
        else:
            shutil.copy(src, destination)
    else:
        print src+" not found"

我一直使用这个方法很好,但是我最近在运行这段代码时遇到了错误:

copy("/home/midgar/logs/logger.xml", currentPath+"/testrun/logs/logger.xml")

错误:IOError: [Errno 2] No such file or directory: 'collectedLogs/testrun/logs/logger.xml'

如果它正在查找的文件或目录是 src,我会理解此错误意味着什么,但这是导致错误的目标。我发现抛出错误的这行代码在我的复制方法中转到以下行:“shutil.copy(src,destination)”。

到目前为止,我的复制方法只是覆盖现有文件,如果存在现有目录,它会创建一个带有时间戳的新目录。在这种情况下,目标文件无论如何都不存在。那么,可能是什么问题?为什么我在 DESTINATION 路径中收到此错误(我通常希望在 SRC 路径中看到这种错误)。

可能是因为这是一个 .xml 文件?

【问题讨论】:

  • 请注意,home/midgar/logscollectedLogs/testrun/logs/logger.xml 都是相对路径。根据您当前的工作目录(bash 中的$PWD),这将具有不同的含义。
  • 这是一个很好的观点,我实际上做了一个编辑,因为我有一个类型(它应该是“/home”,而不是“home”)。此外,变量“currentPath”是完整路径的开始,使 src 和 dest 都成为完整路径
  • 假设/home/midgar/logs 是一个目录,你要求shutil.copy 将一个目录复制到一个文件中。对吗?
  • 伙计,对于最初帖子中的所有错误,我真的很抱歉,我又漏掉了一些东西。我实际上是从“/home/midgar/logs/logger.xml”中提取一个文件。当然,我为此更改编辑了原始帖子。

标签: python xml linux file shutil


【解决方案1】:

当我收到此错误时,通常表示其中一个文件夹不存在。

我写了一个简单的脚本来测试它。在下面的脚本中,备份文件夹确实存在,但今天的文件夹不存在。当我运行脚本时,我得到了和你一样的错误。

IOError: [Errno 2] 没有这样的文件或目录:'backup/today/my_file.txt'

import shutil
shutil.copy("my_file.txt", "backup/today/my_file.txt")

如果您的所有文件夹都存在,我会检查以确保它们的权限没有更改。

【讨论】:

  • 在此评论之后,我几乎可以肯定问题在于我试图将 xml 文件放入的“日志”目录也不存在(就像您的示例一样今天目录)。我将尝试修改复制方法,以便它可以处理目标源不仅仅是文件或目录的情况(例如创建一个新目录然后将文件放入其中)。谢谢!
  • 在 stackexchange 上,您应该避免使用“谢谢”cmets,但您可以将答案标记为正确 :)
【解决方案2】:

默认情况下,shutil.copytree() 遵循(解析)符号链接。如果符号链接损坏,则会引发No such file or directory 异常。一种解决方法是通过传递 symlinks=True 指定应复制未解析的符号链接。

【讨论】:

    猜你喜欢
    • 2016-06-07
    • 1970-01-01
    • 2019-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-10
    • 2017-07-05
    • 2018-11-20
    相关资源
    最近更新 更多