如何在BashOperator中执行python代码和气流宏?

时间:2019-03-28 21:20:42

标签: jinja2 airflow

我正在尝试在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脚本...但我不确定。

1 个答案:

答案 0 :(得分:1)

上述方法不起作用的原因是因为我同时使用了jinja2和python f-strings,从而造成了混乱。

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

这不是最干净的解决方案,但它可以工作。