首页 > 解决方案 > 如何在 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_commandairflow.exceptions.AirflowException: Bash command failed.

我的问题是:我正在尝试做的事情是否可行,如果可以,怎么做?我想我只是以错误的方式编写 jinja 脚本......但我不确定。

标签: jinja2airflow

解决方案


以上不起作用的原因是因为我同时使用了两者jinja2和python f-strings,从而导致混乱。

没有办法(我发现)直接从bash_command=. 用于执行 bash 命令的包装器 python 函数和用于执行包装器函数的解决方案是一种解决方案,因为它为气流宏的使用提供了极大的灵活性(我在和 python 代码中PythonOperator使用的原因。jinja2bash_command=

这不是最干净的解决方案,但它有效。


推荐阅读