这是我的第一个问题。
我的python脚本打开并使用以下简单功能从当前文本文件中读取:
open("config.ini", "r")
因为这是一个相对路径所以它应该起作用,因为config.ini被放置在同一个目录中,就像脚本启动时一样,应该是当前正在工作的目录。
事实上,这在我的所有3个Linux机箱上都能完美运行,但我有一个用户需要支持,因为他在打开config.ini时遇到错误。错误引发了,因为
os.path.exists("config.ini")
即使文件在那里,也会返回false!
试图解决这个问题,我们发现使其工作的唯一方法是将config.ini放在他的主目录中,尽管假设工作目录是另一个。
另外,如果我的脚本试图在当前工作目录中创建一个文件,那么该文件总是在他的家庭目录中创建,所以我认为由于某种原因,他的工作目录总是在家里!
如何解决此问题?也许我可以引入绝对路径,但我担心os.getcwd()会返回homedir而不是正确的路径。
我是否可以建议该用户以某种方式修理他的机器?
很抱歉这个长问题,但英语不是我的第一语言,我是编码的初学者,所以有一些难以解释。
非常感谢您提前! =)
答案 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]
应始终是脚本所在的目录。