为什么 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
失败)
我在 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
失败)