Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 运行简单运算符时TemplateNotFound错误_Python_Airflow - Fatal编程技术网

Python 运行简单运算符时TemplateNotFound错误

Python 运行简单运算符时TemplateNotFound错误,python,airflow,Python,Airflow,我正在尝试编写第一个Airflow DAG,当我尝试使用命令Airflow list\u tasks orderwarehouse列出任务时,出现以下错误: Traceback (most recent call last): File "/usr/local/lib/python2.7/site-packages/airflow/models.py", line 2038, in resolve_template_files setattr(self, attr, env.load

我正在尝试编写第一个Airflow DAG,当我尝试使用命令
Airflow list\u tasks orderwarehouse
列出任务时,出现以下错误:

Traceback (most recent call last):
  File "/usr/local/lib/python2.7/site-packages/airflow/models.py", line 2038, in resolve_template_files
    setattr(self, attr, env.loader.get_source(env, content)[0])
  File "/usr/local/lib/python2.7/site-packages/jinja2/loaders.py", line 187, in get_source
    raise TemplateNotFound(template)
TemplateNotFound: ./home/deploy/airflow-server/task_scripts/orderwarehouse/load_warehouse_tables.sh
此DAG不应使用模板。我只尝试按照中的说明在指定位置运行shell脚本。shell脚本确实存在于该位置,并且拼写正确。我的DAG看起来像这样:

from airflow import DAG
from airflow.operators.bash_operator import BashOperator

default_args = {
    'owner': 'airflow',
    'depends_on_past': False,
    'start_date': datetime(2015, 6, 1),
    'email': ['airflow@airflow.com'],
    'email_on_failure': False,
    'email_on_retry': False,
    'retries': 1,
    'retry_delay': timedelta(minutes=5),
    # 'queue': 'bash_queue',
    # 'pool': 'backfill',
    # 'priority_weight': 10,
    # 'end_date': datetime(2016, 1, 1),
}

orderwarehouse = DAG('orderwarehouse', default_args=default_args)

load_mysql = BashOperator(
    task_id='load_warehouse_mysql',
    bash_command='./home/deploy/airflow-server/task_scripts/orderwarehouse/load_warehouse_tables.sh',
    dag=orderwarehouse)

不知道为什么它认为需要寻找Jinja模板。关于这一点的想法已经没有了,如果有人能告诉我我将要走错的方向,我将不胜感激。谢谢。

这是气流的陷阱。在bash_命令的末尾添加一个空格,它应该可以正常运行

资料来源:

您应该尝试在文件路径的末尾使用空格。无论使用哪种运算符,都应始终遵循相同的规则

load_mysql = BashOperator(  
             task_id='load_warehouse_mysql',  
             command='/home/deploy/airflow-server/task_scripts/orderwarehouse/load_warehouse_tables.sh ',  
             dag=orderwarehouse)  

除了提供的所有答案之外,我还必须做更多的事情来消除jinja模板未找到的问题

在任务定义中,我们必须在文件名后添加空格


发现它还可以与文件名前面的换行符一起使用!如果命令后面有参数(例如,
bash/path/to/script.sh arg1 arg2…
),这是否也适用?文档似乎没有指明。我想是的,但是我还没有测试过。如果你看一下,有
template\u ext=('.sh','.bash',)
。任何以这些值结尾的字符串都将被解释为Jinja模板文件。还有
template\u fields=('bash\u command','env')
这是这个行为适用的字段列表。现在是2020年,这个bug怎么还存在?我只是花了几个小时来追踪这个(