气流通过bash运算符执行python脚本

时间:2020-07-17 11:54:49

标签: python python-3.x airflow

我有一个Python脚本test2.py连接到远程服务器并执行命令。如下。这在命令行上有效。

以JSON形式传递参数并以JSON形式获取响应时,可以在命令行中按以下方式执行。

python3.6 test2.py  '{"hostname": "<server>", "username":"<test>", "password":"<test1>", "command1":"hostname"}'

我正试图通过气流执行同样的操作

from __future__ import print_function
from airflow.operators import BashOperator
from airflow.models import DAG
from datetime import datetime, timedelta


default_args = {
    'owner': 'airflow',
    'depends_on_past': False,
    'start_date': datetime(2018, 9, 1),
    'email_on_failure': False,
    'email_on_retry': False,
    'schedule_interval': '@daily',
    'retries': 1,
    'retry_delay': timedelta(seconds=5),
}

dag = DAG(
    dag_id='DAG-3',
    default_args=default_args,
    dagrun_timeout=timedelta(minutes=10)
    )

cmd_command = "python3.6 /root/test2.py '{{"hostname": "<server>", "username":"<test>", "password":"<test1>", "command1":"hostname"}}'"


t = BashOperator(
     task_id = 'some_id',
     bash_command = cmd_command,
     dag = dag)
 

我看到以下与语法有关的错误??

cmd_command = "python3.6 /root/test2.py '{{"hostname": "<server>", "username":"<test>", "password":"<test1>", "command1":"hostname"}}'"
                                                       ^
SyntaxError: invalid syntax

能帮忙吗

谢谢

1 个答案:

答案 0 :(得分:1)

您对JSON使用双引号,但Python将其解释为字符串的开始或结尾。解决此问题的一种方法是在JSON中转义双引号:

cmd_command = "python3.6 /root/test2.py '{\"hostname\": \"<server>\", \"username\":\"<test>\", \"password\":\"<test1>\", \"command1\":\"hostname\"}'"