BashOperator 执行 python 安装在 windows

BashOperator execute python installed on windows

请参考:

.

采用该概念并尝试将其应用于 Apache Airflow。我在 Linux (WSL) 的 Windows 子系统上安装了 Airflow 运行。我还在 Windows 10 上安装了 Python 安装和 .py 文件。我想使用 Airflow 执行 .py 文件。

如果我在Ubuntu中执行以下命令:

/mnt/c/path/to/windows_python/python.exe C:\path\to\my\python\file\my_file.py

my_file.py 使用我的 Windows 10 安装的 Python 运行。但是,如果我在 DAG 中使用 BashOperator 进行相同的调用,我会看到 "Bash command failed" 错误。我的 DAG 文件中的任务如下所示:

t1 = BashOperator(
    task_id = 'my_task'
    , bash_command = '/mnt/c/path/to/windows_python/python.exe C:\path\to\my\python\file\my_file.py'
    , dag = dag)

DAG 在 Airflow 中失败,日志中显示消息:无法打开文件 C:\path\to\my\python\file\my_file.py。没有那个文件或目录。

我想在 Windows 端调用 Python 文件和可执行文件的原因是因为我已经在那里设置了 SQL 驱动程序和 VPN。

非常感谢任何帮助。目标是通过任何必要的方式从 Airflow(运行 on WSL)调用 .py 文件。

将在这里回答我自己的问题,以防将来其他人需要它。我无法解释我看到的行为,但作为一种解决方法:

  1. 创建包含 bash 命令的 .sh 文件
  2. 使用 BashOperator 调用 .sh 文件

示例:

command = '/path/to/sh/file/my_file.sh '

t1 = BashOperator(
    task_id = 'my_task'
    , bash_command = command
    , dag = dag)

我注意到,当您将 Python 文件放入 dags 文件夹时,BashOperator 会执行该文件。但是当我在 dags 文件夹之外尝试时,我不起作用。似乎您必须将文件放在 dags 文件夹中,或者您可以在 dags 文件夹中创建另一个文件夹并将您的 Python 脚本放在那里。