简介 在做一个项目的时候,需要将一个python程序设为开机自启动,因此自启动时的启动命令是绝对路径启动的,然而绝对路径的启动会导致python无法正常运行,会报错找不到程序所需要的其他文件(放在和源文件一个目录下),如图:
文章图片
经过分析后定位了问题,也找到了解决方案,使其可以正常运行。
原因分析 分析源代码,可以发现源代码涉及到一个读取文件的函数如下:
文章图片
在该目录下直接使用python3 ./xxx.py
命令可以正常读取到文件,而使用/home/xxx/xxxxx/xxx.py
的绝对路径的方式则会出错。可以看到读取函数中使用的是相对路径,而使用两种命令的方式可能会导致工作目录不一致的问题。前者可以保证程序运行时工作目录就在工程目录下,而使用绝对路径运行时工作目录可以是任何位置,而由于读取函数时会在工作目录下寻找该配置文件,在不合理的工作目录下自然也就无法运行。
解决方法 找到了问题所在,自然也很容易解决问题了,只需要在程序开始读取配置时手动将工作目录切换到源文件所在目录下即可。
更换工作目录的方法:
import os
os.chdir('path')
获取源文件所在目录下的方法:
improt os
print(os.path.dirname(os.path.abspath(__file__)))
【python|python程序无法以绝对路径执行,只能在程序文件夹下运行的解决方法】只需要将两者结合一下,就可以完成在每次读取文件前切换工作目录了!
import os
os.chdir(os.path.dirname(os.path.abspath(__file__)))#切换目录到当前脚本下
推荐阅读
- 推荐系统论文进阶|CTR预估 论文精读(十一)--Deep Interest Evolution Network(DIEN)
- Python专栏|数据分析的常规流程
- Python|Win10下 Python开发环境搭建(PyCharm + Anaconda) && 环境变量配置 && 常用工具安装配置
- Python绘制小红花
- Pytorch学习|sklearn-SVM 模型保存、交叉验证与网格搜索
- OpenCV|OpenCV-Python实战(18)——深度学习简介与入门示例
- python|8. 文件系统——文件的删除、移动、复制过程以及链接文件
- 爬虫|若想拿下爬虫大单,怎能不会逆向爬虫,价值过万的逆向爬虫教程限时分享
- 分布式|《Python3网络爬虫开发实战(第二版)》内容介绍
- java|微软认真聆听了开源 .NET 开发社区的炮轰( 通过CLI 支持 Hot Reload 功能)