如何修复工作目录总是回家? (蟒蛇)

时间:2010-06-26 09:34:28

标签: python working-directory home-directory

这是我的第一个问题。

我的python脚本打开并使用以下简单功能从当前文本文件中读取:

open("config.ini", "r")

因为这是一个相对路径所以它应该起作用,因为config.ini被放置在同一个目录中,就像脚本启动时一样,应该是当前正在工作的目录。

事实上,这在我的所有3个Linux机箱上都能完美运行,但我有一个用户需要支持,因为他在打开config.ini时遇到错误。错误引发了,因为

os.path.exists("config.ini")
即使文件在那里,

也会返回false!

试图解决这个问题,我们发现使其工作的唯一方法是将config.ini放在他的主目录中,尽管假设工作目录是另一个。

另外,如果我的脚本试图在当前工作目录中创建一个文件,那么该文件总是在他的家庭目录中创建,所以我认为由于某种原因,他的工作目录总是在家里!

如何解决此问题?也许我可以引入绝对路径,但我担心os.getcwd()会返回homedir而不是正确的路径。

我是否可以建议该用户以某种方式修理他的机器?

很抱歉这个长问题,但英语不是我的第一语言,我是编码的初学者,所以有一些难以解释。

非常感谢您提前! =)

2 个答案:

答案 0 :(得分:5)

用户是否正在从他的主目录执行脚本

即。假设脚本位于:

/home/user/test/foo/foo.py

但是用户这样称呼它:

/home/user> python test/foo/foo.py

在这种情况下,脚本看到的“当前目录”是/home/user

您可以通过调用此函数找到脚本本身所在的目录:

import os

def script_dir():
    return os.path.dirname(os.path.realpath(__file__))

它将始终返回脚本所在的目录,而不是当前可能不同的目录。然后,您可以安全地存储配置文件。

答案 1 :(得分:0)

与Eli Bendersky的建议一样,您可能想尝试:

os.path.exists(os.path.join(sys.path[0],"config.ini"))

因为sys.path[0]应始终是脚本所在的目录。