使用绝对路径在启动时(startx)运行 Python 脚本,脚本内包含相对路径
我知道这个问题可能已经有人问过了,但我找到的答案都没用,而且我的情况有点不同。
我有一个Python文件 /home/pi/python_games/frontend.py
,我想在lxde启动时自动运行它,所以我在 /etc/xdg/lxsession/LXDE/autostart
里放了 @python /home/pi/python_games/frontend.py
。
但是它没有运行,也没有任何错误信息。
当我尝试运行 python /home/pi/python_games/frontend.py
时,Python抱怨找不到用相对路径加载的文件,比如 /home/pi/python_games/image.png
是用 image.png
来调用的。显然,一个解决办法是给这些资源使用绝对路径,但这个Python程序还调用了它目录下的其他Python程序,这些程序也用相对路径,我不想去改动它们。
有没有人有什么好主意?
谢谢,Tom
2 个回答
0
与其改变你当前的工作目录,不如在你的frontend.py
脚本中使用一个叫__file__
的预定义模块属性。这个属性会给出脚本文件的绝对路径,你可以用它来找到同一目录下其他文件的绝对路径。
在os.path
模块中,有一些函数,比如split()
和join()
,可以让你很方便地完成这个操作。
1
你可以在脚本里先改变你当前的工作目录,然后再开始调用相对导入。可以使用 os.chdir("你脚本所在的绝对路径") 来实现。