【问题标题】:os.rename to move a fileos.rename 移动文件
【发布时间】:2016-03-02 11:05:00
【问题描述】:

我正在尝试创建一个程序,它将自身复制到另一个目录中以供以后使用。它在我的 Windows 7 机器上运行良好,但由于某种原因,我收到以下错误消息。

WindowsError: [Error 3] The system cannot find the path specified

我已使用py2exe 将其编译为可执行文件。无论如何,这是我的代码:

home = os.path.expanduser("~")
installPath = home + "\Logs"
copyPath = installPath + "\Keylogger.exe"

def installExe(copyPath):
    if not os.path.exists(copyPath):
        path = os.getcwd()
        path = os.path.join(path, "Keylogger.exe")
        os.rename(path, copyPath)

【问题讨论】:

    标签: python windows operating-system exe


    【解决方案1】:

    打印 copyPath 并手动检查它是否存在 - 它看起来合理吗? 那些反斜杠在例如"\Keys""\Keylogger.exe" 是问题,它们在 python 字符串语法中被称为转义序列,因此将以下字符转换为单个字符。有关更多信息,请参阅文档,例如https://docs.python.org/2.0/ref/strings.html

    创建路径的正确且稳健的方法是使用 os.path.join():

    home = os.path.expanduser("~")
    installPath = os.path.join( home, "Logs" )
    copyPath = os.path.join( installPath, "Keylogger.exe" )
    

    【讨论】:

    • os.path.join 是首选,但'\K' 不是问题。没有\K 转义,因此Python 将其保留在字符串文字中,就好像它是写成'\\K' 一样。问题可能是当前工作目录不在Keylogger.exe 所在的位置。 sys.executable 应该是冻结的可执行文件的绝对路径。
    • installExe 还需要处理Keylogger.exe 不在目标卷上的情况。 Python在调用MoveFileEx时没有指定MOVEFILE_COPY_ALLOWED,所以os.rename在跨卷的情况下会失败。
    猜你喜欢
    • 2021-09-11
    • 1970-01-01
    • 2014-06-08
    • 2021-03-11
    • 2014-04-07
    • 1970-01-01
    • 1970-01-01
    • 2020-02-24
    • 2012-05-04
    相关资源
    最近更新 更多