首页 > 解决方案 > 从 SSHOperator 解码 UTF-8 编码的 Xcom 值

问题描述

我有两个要交流的 Airflow 任务。SSHOperator 返回打印的最后一行,在本例中为“remote_IP”。但是,SSHOperator 的返回值是使用 UTF-8 编码的。

Read_remote_IP = SSHOperator(
    task_id='Read_remote_IP',
    ssh_hook=hook,
    command="echo remote_IP ",
)

Read_SSH_Output = BashOperator(
    task_id='Read_SSH_Output',
    bash_command="echo {{ti.xcom_pull(task_ids='Read_remote_IP')}} ",
)

SSHOperator 如何Read_remote_IP返回未编码的值?另外,BashOperator 如何Read_SSH_Output解码编码值?

标签: pythonpython-3.xairflow

解决方案


我目前的解决方案是引入另一个 Python 运算符来将字符串转换回来,请随时提供其他解决方案。

import base64
from airflow.operators.python import PythonOperator

def _decode_message(task_name, ti):
    message = ti.xcom_pull(task_ids=task_name)
    print(message)
    return base64.b64decode(message).decode()

Decode_SSH_Output = PythonOperator(
    task_id='Decode_SSH_Output',
    python_callable=_decode_message,
    op_args=['Read_remote_IP'],
)

推荐阅读