我正在尝试在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脚本...但我不确定。
答案 0 :(得分:1)
上述方法不起作用的原因是因为我同时使用了jinja2
和python f-strings
,从而造成了混乱。
(我发现)没有办法直接从bash_command=
合并两者。一个执行python命令的包装器python函数和一个执行包装器函数的PythonOperator
是一个解决方案,因为它在使用气流宏方面提供了极大的灵活性(我在程序包中使用jinja2
的原因bash_command=
和python代码。
这不是最干净的解决方案,但它可以工作。