为什么 WPFApp 会更改 '.'小路?

Why the WPFApp change the '.' path?

我在 D:/program/python/test_project/ 中有一个 python 项目。在该目录中有一个名为'start.py'的入口脚本。它使用像'./pictures/icons/pic.png'这样的相对路径来索引该项目中的其他文件。

一切正常,直到我将 CSharp 项目用于 运行 python 项目,它抛出路径错误 Exception.I print 'os.path.abspath('.')' 和它指的是路径 'WPFApp\bin\Debug'。WPF 是我的 CSharp 项目的根目录。

为什么会这样?为什么是“.”代表当前目录更改?

os.path.abspath('.') 为您提供 python 脚本的当前工作目录。当您从 WPF 应用程序的上下文中启动该脚本时,这就是用作工作目录的内容。

要找到脚本文件的路径,请查看这个 SO 问题:How to properly determine current script directory?

当 运行 通过 IDE 应用程序时,您不能真正依赖当前目录(与 运行 例如 .bat 文件相反)。

如果您需要与主脚本相对的资源文件,则不能使用相对路径。

您可以使用 __file__ 为当前 python 脚本提供完整路径名,因此

os.path.join(os.path.dirname(__file__),'pictures/icons/pic.png')

是你的资源文件的绝对路径,与当前目录无关(通常你不能也不应该依赖它)

如果由于某种原因您无法更改所有相对路径,您可以将当前目录更改为启动时的脚本目录。不是最好的解决方案,但在这种情况下它可能会起作用:

os.chdir(os.path.abspath(os.path.dirname(__file__)))

(添加 abspath 就好像 __file__ returns 一个文件名,dirname returns 一个空字符串并且 chdir 失败)