извлечь параметры из BashOperator в Airflow - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть следующий оператор:

import = BashOperator(
    task_id='import',
    bash_command="""python3 script.py `{{ var.value.run_value }}`  'file.json'""",
    dag=dag)

Когда я смотрю на шаблон, я вижу:

python3 script.py `2018-09-13 11:53:38.725089`  'file.json'

Пока отлично. Однако мой сценарий не работает с этим вводом:

if __name__ == '__main__':
    if str(sys.argv[1]):
        time_value = str(sys.argv[1])[:-7]  # from 2018-09-13 11:01:18.287705 to 2018-09-13 11:01:18
    else:
        time_value = '1900-01-01 00:00:00'
    requestedDate = time_value.split(' ', 1)[0]          #From 2018-08-20 15:00:00  get only 2018-08-20
    requestedTime = (time_value.split(' ', 1)[1])[:-3]   #From 2018-08-20 15:00:00  get only 15:00
    pathConfigFile = (sys.argv[2])

Это не работает.

То, что я хочу, это:

time_value  =  YYYY-MM-DD HH:MM:SS
requestedDate = YYYY-MM-DD
requestedTime = HH:MM:SS
pathConfigFile = 2nd parameter given.

Воздушный поток показывает мне:

 {bash_operator.py:101} INFO - SyntaxError: invalid syntax 

Кроме того, я даже не могу напечатать ввод. Когда я пробую код без Airflow как чистый скрипт на python, у меня не возникает никаких проблем.

Я должен отметить. Воздушный поток работает под Python 2.7, но скрипт выполняется под Python 3

В чем проблема?

1 Ответ

0 голосов
/ 13 сентября 2018

Вы, кажется, заключили макрос в кавычки, которые Bash интерпретирует как желание выполнить содержимое. Вы должны перейти на одинарные кавычки.

Ваш вывод должен выглядеть так:

python3 script.py '2018-09-13 11:53:38.725089'  'file.json'
...