我在D:/ program / python / test_project /中有一个python项目。在目录中有一个名为“ start.py”的输入脚本。它使用诸如“ ./pictures/icons/pic.png”之类的相对路径来索引该项目中的其他文件。
在我使用CSharp项目运行python项目之前,一切正常,并且抛出路径Error Exception。我打印'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__
返回文件名,dirname
返回空字符串,chdir
失败]