QFileDialog创建中os.getenv("HOME")有什么用?

What is the use of os.getenv("HOME") in QFileDialog creation?

就像我在标题中所说的那样,我不明白 os.getenv("HOME") 在这段代码中做了什么。我正在学习一个在线网站上的课程,导师正在用 PyQt5 编写一个类似于记事本的界面。我搜索了答案,但我猜它们有点太高级了。我也不知道什么是环境变量。顺便说一句,这是我关于堆栈的第一个问题,所以请原谅任何可能的错误和不充分的信息。

def open_file(self):

        file_name=QFileDialog.getOpenFileName(self,"Open File",os.getenv("HOME"))

        with open(file_name[0],"r") as file:
            self.writing_ar.setText(file.read())

上面的函数连接到一个按钮self.open比如self.open.clicked.connect(self.open_file) self.writing_ar 是一个 QTextEdit object

它基本上为您获取一个环境变量并将其转换为 python 变量。

根据您共享的代码,应该有一个在 操作系统级别 定义的名为 HOME.

的变量

在 Linux 中,可以用

完成
export HOME="something_here"

您可以通过键入

来检查该变量是否已实际定义
echo "$HOME"

在终端中。

您可以想像 os.getenv() 方法,它会将参数的值“回显”到某个变量上。

os.getenv('HOME') 的情况下,这是一种获取当前用户主目录的 UNIX-centric 方法,该目录存储为 environment variable per POSIX specification。典型的主目录位置是 MacOS 上的 /Users/yourname,或 Linux 上的 /home/yourname,或 Windows 上的 c:\Users\Your Name——所以这就是这段代码试图查看的内容向上。

环境变量集实际上是一个 key/value 存储,将字符串映射到其他字符串,从任何程序复制到它启动的其他进程;因此,它们是在程序之间共享配置和其他信息的一种方式(尽管它只在树下共享信息,仅在进程创建时传播;child 进程所做的更改不会被其 parent 看到; child 启动后对 parent 环境的更改不会被 child) 看到。

如果您想要即使在 Windows 上也能可靠运行的东西,请考虑 os.path.expanduser("~")。因此,您的代码可能会变成:

file_name = QFileDialog.getOpenFileName(self,
                                        "Open File",
                                        os.path.expanduser("~"))

另见 What is the correct cross-platform way to get the home directory in Python?