Cookiecutter的pre_prompt.py钩子能否访问模板的output_dir值?
问题根源
pre_prompt.py属于预提示阶段脚本,此时Cookiecutter还未完成模板渲染,{{ cookiecutter.output_dir }}这类Jinja语法不会被解析;同时脚本运行在Cookiecutter临时处理目录中,用os.getcwd()只能拿到临时目录路径,无法获取最终的目标父目录。
正确实现方式
Cookiecutter会将上下文数据通过环境变量传递给预阶段脚本,你可以直接读取COOKIECUTTER_OUTPUT_DIR环境变量来获取目标输出目录:
#!/usr/bin/env python # -*- coding: utf-8 -*- import os # 从环境变量获取最终输出目录 output_dir = os.environ.get('COOKIECUTTER_OUTPUT_DIR') if output_dir: # 提取输出目录的父目录 parent_dir = os.path.dirname(output_dir) print(f"目标父目录: {parent_dir}") else: print("无法获取output_dir,请确认Cookiecutter版本是否支持该环境变量")
额外说明
- 所有预阶段脚本(pre_prompt、pre_gen)都只能通过
COOKIECUTTER_*前缀的环境变量访问Cookiecutter上下文,不能使用Jinja模板语法 - cookiecutter.json中定义的每一个字段,都对应一个
COOKIECUTTER_字段名格式的环境变量(字段名转为大写)
内容的提问来源于stack exchange,提问作者snapp
相关产品推荐
相关产品推荐

