如何修复工作目录总是为主目录?(Python)

2 投票
2 回答
509 浏览
提问于 2025-04-16 00:28

这是我第一个问题。

我的Python脚本使用以下简单的函数打开并读取一个现有的文本文件:

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

因为这是一个相对路径,所以它应该可以正常工作,因为config.ini文件和脚本在同一个目录下运行,这个目录应该是当前的工作目录。

实际上,这在我所有的三台Linux电脑上都能完美运行,但有一个用户需要支持,因为他在打开config.ini时遇到了错误。这个错误是因为

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

即使文件存在,它也返回了错误的结果!

为了修复这个问题,我们发现唯一能让它正常工作的办法是把config.ini放在他的主目录下,尽管应该的工作目录是其他地方。

而且,如果我的脚本尝试在当前工作目录中创建一个文件,文件总是会在他的主目录中创建,所以我觉得出于某种原因,他的工作目录总是指向主目录!

我该如何排查这个问题呢?也许我可以使用绝对路径,但我担心os.getcwd()会返回主目录而不是正确的目录。

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

抱歉提了这么长的问题,因为英语不是我的母语,而且我还是编程初学者,所以在解释时有些困难。

非常感谢!=)

2 个回答

0

和Eli Bendersky的建议类似,你可以试试:

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

因为sys.path[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__))

这个函数总是会返回脚本所在的目录,而不是可能不同的当前目录。这样你就可以安全地把配置文件存放在那里。

撰写回答