我在我的 dags / 文件夹下创建了一个 python_scripts / 文件夹。 我有2个不同的dag运行相同的python_operator-调用位于 python_scripts / 文件夹中的2个不同的python脚本。 他们都写输出文件,但是:
其中之一在 dags / 文件夹下创建文件,而其中之一在 plugins / 文件夹中创建文件。
气流如何确定工作路径? 如何让Airflow将所有输出写入同一文件夹?
答案 0 :(得分:2)
您可以尝试做的一件事,就是在DAG中添加os.chdir('some/path')
来设置工作路径。
仅当您不将其放入运算符中时才有效,因为它们在子流程中运行,因此不会更改父流程的工作路径。
我想到的另一种解决方案是在指定输出时使用绝对路径。
对于使用os.chdir
的方法,请尝试以下操作,您应该看到两个文件都在用path='/home/chr/test/'
定义的文件夹中创建:
from datetime import datetime
import os
import logging
from airflow import DAG
from airflow.exceptions import AirflowException
from airflow.operators.python_operator import PythonOperator
log = logging.getLogger(__name__)
default_args = {
'owner': 'admin',
'depends_on_past': False,
'retries': 0
}
dag = DAG('test_dag',
description='Test DAG',
catchup=False,
schedule_interval='0 0 * * *',
default_args=default_args,
start_date=datetime(2018, 8, 8))
path = '/home/chr/test'
if os.path.isdir(path):
os.chdir(path)
else:
os.mkdir(path)
os.chdir(path)
def write_some_file():
try:
with open("/home/chr/test/absolute_testfile.txt", "wt") as fout:
fout.write('test1\n')
with open("relative_testfile.txt", "wt") as fout:
fout.write('test2\n')
except Exception as e:
log.error(e)
raise AirflowException(e)
write_file_task = PythonOperator(
task_id='write_some_file',
python_callable=write_some_file,
dag=dag
)
此外,请在下次问问题时尝试提供代码,因为仅通过阅读问题就几乎不可能找出问题所在。