Python os.list_dir短停一级
因此,我试图为我的一个python程序创建一个可执行文件。我需要访问可执行文件所在文件夹中的文件。因为这个文件可能会被移动,所以我使用的是Python os.list_dir短停一级,python,macos,python-2.7,executable,Python,Macos,Python 2.7,Executable,因此,我试图为我的一个python程序创建一个可执行文件。我需要访问可执行文件所在文件夹中的文件。因为这个文件可能会被移动,所以我使用的是import操作系统;当前目录=os.getcwd() 当我使用python filename.py通过终端运行程序,并打印当前目录时,我得到/Users/User/Desktop/Executable/ 当我通过Finder打开.py with terminal来运行可执行文件时(我在OSX上),并且打印了当前目录,我得到/Users/User。注意,这没有
import操作系统;当前目录=os.getcwd()
当我使用python filename.py
通过终端运行程序,并打印当前目录时,我得到/Users/User/Desktop/Executable/
当我通过Finder打开.py with terminal来运行可执行文件时(我在OSX上),并且打印了当前目录
,我得到/Users/User
。注意,这没有我需要的其他两个级别,即桌面/可执行文件
。为什么会发生这种情况
备注:这只是一个一次性的、快速的可执行文件,不打算长时间使用,但却是必要的,因此制作.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__"))
getcwd()的文档说明:返回表示当前工作目录的字符串。当前工作目录可能不是python脚本所在的位置。
您应该检查文档中的函数,该函数将为您提供脚本的目录,而不是可能不同的工作目录。这将为您提供适当的文件,它将返回可执行文件的路径或脚本的路径
if hasattr(sys, 'frozen'):
basis = sys.executable
else:
basis = sys.argv[0]
如果这对您不起作用,请尝试将else:部分更改为
os.path.dirname(os.path.realpath(“\uu文件”)
编辑:显然:import sys
可执行文件将添加一个冻结属性,请在检查工作目录之前检查该属性。冻结的应用程序可能会针对python.exe运行,python.exe将以不同的方式解析您的工作目录,因为您的工作目录不同,将完整路径传递到该目录此问题可能会有所帮助…即使这样,并且更改
else
,我仍然会得到相同的行为。嗯,我会继续玩这个。非常感谢。我会说,当我用终端打开.py时,终端运行的命令是/Users/User/Desktop/Executable/filename.py;退出代码>。我不知道这是否有用。python文件实际存在于此吗?不是吗?该.py文件存在于/Users/User/Desktop/Executable/filename.py
。运行该可执行文件仍然会给您提供错误的路径?我得到了答案。我实验室的一个家伙帮了我。答案是在else
中执行basis=os.path.dirname(sys.argv[0])
。