为什么WPFApp更改了'。路径?

问题描述 投票:0回答:2

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

在我使用CSharp项目运行python项目之前,一切正常,并且抛出路径Error Exception。我打印'os.path.abspath('。')',它引用路径'WPFApp \ bin \ Debug '。WPF是我的CSharp项目的根目录。

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

c# python wpf operating-system relative-path
2个回答
1
投票

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

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


1
投票

[通过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失败]

© www.soinside.com 2019 - 2024. All rights reserved.