如何修改Makefile工作目录,指定Python脚本数据库生成路径?
解决Makefile运行Python脚本时数据库路径错误的问题
我明白你的困扰——通过Makefile启动Python脚本时,本该在脚本所在目录生成的数据库跑到了Makefile的目录下。这背后的原因其实很简单:你在Makefile循环里的cd ${dir}只是在Make进程的shell环境里切换了目录,但gnome-terminal启动的新终端进程会继承Makefile所在的初始工作目录,并不会跟着切换到脚本目录。
下面给你两种可行的解决方案:
方案1:让gnome-terminal启动时切换到脚本目录
gnome-terminal支持用--working-directory参数指定新终端的工作目录,你只需要修改Makefile里的循环命令,把脚本所在目录传给这个参数就行:
PYTHON = python3 TERMINAL = gnome-terminal TFLAG = -- # 替换为你实际的脚本文件夹列表 FOLDERS = PythonScript1 PythonScript2 PythonScript3 run: for dir in $(FOLDERS); do \ ${TERMINAL} --working-directory="$${dir}" ${TFLAG} ${PYTHON} main.py ; \ done
这样每个新终端都会先切换到对应的脚本目录,再执行main.py,数据库自然就会生成在预期的位置了。
方案2:在Python脚本中固定数据库路径(更可靠)
如果担心不同终端的参数差异,或者希望脚本不管从哪里启动都能正确生成数据库,你可以直接在Python脚本里获取自身所在的目录,然后基于这个路径创建数据库。比如在main.py里这么写:
import os # 获取当前脚本所在的绝对路径 script_dir = os.path.dirname(os.path.abspath(__file__)) # 拼接数据库文件的完整路径 db_path = os.path.join(script_dir, "your_database.db") # 后续用db_path来创建/操作数据库即可
这种方法从根源上避免了工作目录的问题,不管是通过Makefile、终端手动运行,还是其他方式启动脚本,数据库都会生成在脚本所在目录。
你可以根据自己的需求选择其中一种方案,第一种改Makefile更快捷,第二种更通用稳定。
内容的提问来源于stack exchange,提问作者user169808
相关产品推荐
相关产品推荐

