2

这是我的第一个问题。

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

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

由于这是一个相对路径,它应该可以工作,因为 config.ini 与脚本启动时位于同一目录中,这应该是当前工作目录。

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

os.path.exists("config.ini")

即使文件在那里也返回 false !

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

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

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

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

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

非常感谢您!=)

4

2 回答 2

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__))

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

于 2010-06-26T09:41:32.737 回答
0

与 Eli Bendersky 的建议相同,您可能想尝试:

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

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

于 2010-06-26T11:27:35.530 回答