为什么WPFApp更改“。”路径?

时间:2019-10-31 09:14:08

标签: c# python wpf operating-system relative-path

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

一切正常,直到我使用CSharp Project运行python项目,并且抛出路径Error Exception。我打印'os.path.abspath('。')'并引用路径'WPFApp \ bin \调试”。WPF是我的CSharp项目的根目录。

为什么会发生?为什么是“。”代表当前目录更改?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

通过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__返回文件名,dirname返回空字符串,而chdir失败)