在Python环境渲染Quarto文档时,无法从命令行传递参数值到Quarto文件
在Python环境渲染Quarto文档时,无法从命令行传递参数值到Quarto文件
嗨,我来帮你解决这个问题~ 你遇到的NameError是因为Quarto不会自动把命令行传递的参数直接变成Python里的全局变量,和R里直接用params$foo的方式不一样,Python需要显式地从Quarto的参数对象里获取值。
解决这个问题分两步:
1. 在Quarto文档的YAML头部声明参数
首先得在test.qmd的YAML部分添加params字段,告诉Quarto这个参数是合法的(可以给个默认值,方便直接渲染文档时也能正常运行):
--- title: "Test File" format: html html: embed-resources: true execute: echo: False jupyter: python3 params: foo: 0 # 默认值,命令行传递的参数会覆盖这个值 ---
2. 在Python代码块中获取参数
在Python代码里,你需要导入Quarto的参数工具来获取传递的值,然后就可以正常使用了:
from quarto import get_params # 获取所有参数组成的字典 params = get_params() # 取出foo参数的值 print(params['foo'])
修改后的完整test.qmd示例
--- title: "Test File" format: html html: embed-resources: true execute: echo: False jupyter: python3 params: foo: 0 --- # Title Print this in report ```{python} from quarto import get_params params = get_params() print(params['foo'])
### 重新运行命令行 你之前的命令是对的,直接重新执行: ```bash quarto render test.qmd -P foo:5 --output test_cmd_out.html
这次就能正常渲染,并且在报告里输出5啦~
简单总结一下:Python环境下不能直接用参数名当变量,必须通过quarto.get_params()获取参数字典,再通过键名访问对应的值,而R里的params$foo写法不适用Python哦。
备注:内容来源于stack exchange,提问作者ViSa
相关产品推荐
相关产品推荐

