Python os.list_dir 止空一级

Python os.list_dir stopping one level short

所以我正在尝试为我的 python 程序之一制作可执行文件。我需要访问我的可执行文件所在文件夹中的文件。因为这个文件可能会被移动,所以我使用 import os; current_dir = os.getcwd()

当我 运行 通过终端 python filename.pyprint current_dir 程序时,我得到 /Users/User/Desktop/Executable/

当我通过 Finder(我在 OS X 上)用终端打开 .py 来 运行 可执行文件,并打印 current_dir 时,我得到 /Users/User.请注意,这没有我需要的其他 2 个级别,即 Desktop/Executable。为什么会发生这种情况?

备注:这只是一个一次性的、快速的可执行文件,不打算长期使用,但很有必要,所以制作 .py 可执行文件符合我们的目的。这是由 chmod +x filename.py.

完成的

答案是:

import os
import sys
if hasattr(sys, 'frozen'):
     basis = sys.executable
else:
     basis = os.path.dirname(sys.argv[0])

当前工作目录不一定是文件实际所在的目录。要获取实际文件的路径,您可以使用:

os.path.dirname(os.path.realpath("__file__"))

os.getcwd() 的文档说:Return 表示当前工作目录的字符串。当前工作目录可能不是 python 脚本所在的位置。 您应该查看文档中的函数,该函数将为您提供脚本的目录,而不是工作目录,这可能会有所不同。

这应该会为您提供适当的文件,它将 return 可执行文件的路径或脚本的路径。

if hasattr(sys, 'frozen'):
    basis = sys.executable
else:
    basis = sys.argv[0]

如果这对您不起作用,请尝试将 else: 部分更改为

os.path.dirname(os.path.realpath("__file__"))

编辑:显然:import sys

可执行文件将添加冻结属性,在检查工作目录之前检查该属性。冻结的应用程序可能 运行 反对 python.exe 这将以不同的方式解析您的工作目录