我在D:/ program / python / test_project /中有一个python项目。在目录中有一个名为'start.py'的输入脚本,它使用'./pictures/icons/pic.png'之类的相对路径来索引该项目中的其他文件。
一切正常,直到我使用CSharp Project运行python项目,并且抛出路径Error Exception。我打印'os.path.abspath('。')'并引用路径'WPFApp \ bin \调试”。WPF是我的CSharp项目的根目录。
为什么会发生?为什么是“。”代表当前目录更改?
答案 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
失败)