将代码作为可执行文件运行会给我一个错误

时间:2019-07-01 10:43:44

标签: python python-3.x macos

我在.py文件中有以下代码段:

#!/usr/bin/env python3

import os
import shutil
shutil.rmtree(f"{os.getcwd()}/Logs")
os.makedirs(f"{os.getcwd()}/Logs")

当我使用chmod将其转换为可执行文件并运行它时,它给我一个错误提示

  

FileNotFoundError:[错误2]没有这样的文件或目录:'/ Users / myname / Logs'

.py文件运行正常时,为什么会这样?我该如何解决?

编辑: 我是从/Users/myname/Desktop而不是/Users/myname

运行的

编辑: 抱歉,目前还不清楚,我想在当前目录中删除并重新创建一个名为Logs的文件夹,该文件夹是我从(我的桌面)运行文件的目录,但是所有os.getcwd()Path.cwd()都给出了我是/Users/myname,而不是/Users/myname/Desktop

3 个答案:

答案 0 :(得分:0)

因为'/Users/myname/Logs'不存在,所以shutil.rmtree无法将其删除。

您可以尝试手动创建目录,然后再次运行脚本。

答案 1 :(得分:0)

尝试删除该文件夹,如果不存在,Python会引发一个异常,忽略该异常并重新创建目录。另外,使用pathlib,可以极大地简化文件操作。

#!/usr/bin/env python3

import shutil
from pathlib import Path

if __name__ == '__main__':
    logs = Path.cwd() / 'Logs'
    try:
        shutil.rmtree(logs)
    except FileNotFoundError:
        pass
    logs.mkdir(parents=True, exist_ok=True)

答案 2 :(得分:0)

这取决于您如何运行可执行文件。在提示符下,

cd $HOME/Desktop
python3 ./myscript.py

在“桌面”目录中运行脚本,显然您要在其中运行该脚本。

cd $HOME
python3 ./Desktop/myscript.py

在主目录中运行脚本,因为这是您上一次cd编辑的位置。

(如果脚本具有正确的权限,则无需在脚本名称前显式指定python3-您在此处输入的shebang行就足够了。)

如果您从IDLE,pyCharm或VS Code等IDE运行脚本,则IDE可能在启动时位于当前目录中,也可能在您的主目录中运行,这仅仅是因为这是您从中启动图形应用程序的地方系统菜单倾向于运行。某些应用程序允许您按项目,文件或应用程序首选项更改工作目录。

如果脚本需要在特定目录中运行才能正常工作,则可以考虑允许用户传递他们希望对其进行操作的目录作为参数。

顺便说一句,无需显式调用os.getcwd();简单地,Logs指的是当前目录中的Logs-这实际上就是“当前目录”的含义。