python - 如何修复工作目录始终为home? (Python)

标签 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 而不是正确的目录。

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

很抱歉问了这个很长的问题,但英语不是我的母语,而且我是编码初学者,所以解释起来有些困难。

提前非常感谢您! =)

最佳答案

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

即假设脚本位于:

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

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

关于python - 如何修复工作目录始终为home? (Python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3123390/

相关文章:

python - 处理 Chaco 中的时间序列间隙

python - 连接两个一维 NumPy 数组

powershell [System.IO.File]::WriteAllLines 不工作

linux - 为什么我不能访问这个文件夹?

cygwin - 无法从/SPB_Data 更改 Cygwin 主目录

linux - 如何将 Jenkins 主目录从/var/lib 更改为 app 并为原始位置创建符号链接(symbolic link),因为工作不会受到影响

python - '值错误 : Nothing can be done for the type <class 'numpy.core.records.recarray' > at the moment' error

python - 在 NumPy 中计算数组的平均值

unit-testing - Golang : tests and working directory

visual-studio - 在 Visual Studio 2008 中为自定义构建步骤设置工作目录