【问题标题】:Python os.list_dir stopping one level shortPython os.listdir 停止一级短
【发布时间】:2015-10-27 03:40:13
【问题描述】:

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

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

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

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

答案可以在所选答案的 cmets 之后找到:

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

【问题讨论】:

标签: python macos python-2.7 executable


【解决方案1】:

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

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

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

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

编辑:显然:import sys

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

【讨论】:

  • 即使有了这个,并且更改了else,我仍然得到相同的行为。唔。我会继续玩这个。谢谢你。我会说当我用终端打开 .py 时终端运行的命令是/Users/User/Desktop/Executable/filename.py ; exit;。我不知道这是否有用。
  • 那是python文件实际存在的地方吗?这不是正确的吗?
  • .py 文件存在于/Users/User/Desktop/Executable/filename.py
  • 并且运行可执行文件仍然给你错误的路径?
  • 我得到了答案。我实验室的一个家伙帮助了我。答案是做,在elsebasis = os.path.dirname(sys.argv[0])
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2018-03-14
      • 1970-01-01
      • 2018-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-31
      • 2015-10-29
      • 1970-01-01
      相关资源
      最近更新 更多