jinja2 - 如何在 BashOperator 中执行 python 代码和气流宏?
问题描述
我正在尝试在 Airflow 中执行以下任务:
time_zone = "America/New_York"
t1= BashOperator(
task_id='example_task',
bash_command=('script.sh --arg1 hello '
f'--arg2 {{ execution_date + timedelta(days=1).astimezone(pytz.timezone({time_zone})) }}'),
dag=dag)
我遇到的问题是bash_command
. 我正在尝试执行 python 代码并bash_command
在airflow.exceptions.AirflowException: Bash command failed
.
我的问题是:我正在尝试做的事情是否可行,如果可以,怎么做?我想我只是以错误的方式编写 jinja 脚本......但我不确定。
解决方案
以上不起作用的原因是因为我同时使用了两者jinja2
和python f-strings
,从而导致混乱。
没有办法(我发现)直接从bash_command=
. 用于执行 bash 命令的包装器 python 函数和用于执行包装器函数的解决方案是一种解决方案,因为它为气流宏的使用提供了极大的灵活性(我在和 python 代码中PythonOperator
使用的原因。jinja2
bash_command=
这不是最干净的解决方案,但它有效。
推荐阅读
- angular - Angular 7中的多个共享级联组合框组件
- deployment - 在 Slack 上部署 Watson
- docker - 无法从主机连接到 docker 容器内的 .net 核心网站
- java - how to add an image to my sql server database
- c# - 文件上传默认路径
- php - 使用 MailChimp API 将电子邮件地址添加到列表时出错
- javascript - Vue-multiselect如何进行两个输入
- r - Spread data based on multiple key variables
- javascript - Bootstrap: $('#myModal').modal('show'); causes screen to go black
- python - How to mirror value in a column in a new column based on ID