#python #luigi
#python #luigi
Вопрос:
Я учусь использовать luigi, и я хотел бы запустить эту задачу, которую я написал, которая открывает файл, изменяет его и повторно сохраняет выходные данные:
class WindDirection(luigi.Task):
uas_filepath = luigi.parameter.Parameter()
def output(self):
return luigi.LocalTarget("testing/wdir.nc")
def run(self):
# My task
with nc.Dataset(self.uas_filepath, 'r') as uas_reader:
wdir = NCdata.wind_dir_from_component(uas_reader)
# Writing out the output
wdir.write(self.output())
Задача выполняется нормально, но она сохраняет файл как <luigi.local_target.LocalTarget object at 0x7f86ed64ee48>
в том же каталоге, что и задача, а не в testing
папке с именем wdir.nc
(содержимое файла такое, каким оно должно быть). Возможно, из-за проблемы с именованием, когда я повторно запускаю задачу, она создает новую копию файла вместо того, чтобы видеть, что выходной файл этой задачи уже создан. Я пробовал как относительные, так и абсолютные пути к файлам в качестве входных данных для LocalTarget
объекта. .write
Методу, который я вызываю, требуется ввод строки, представляющей собой путь к файлу, и мне интересно, вызывает ли это проблемы.
Что мне нужно сделать, чтобы выходной файл был сохранен с именем, которое я ему дал?
На случай, если это важно, это команда, которую я использую для запуска задачи:
PYTHONPATH='.' luigi --module basic_luigi WindDirection --uas-filepath /aboslute/path/to/my/file.nc --local-scheduler
Ответ №1:
Это должно быть
class WindDirection(luigi.Task):
uas_filepath = luigi.parameter.Parameter()
def output(self):
return luigi.LocalTarget("testing/wdir.nc")
def run(self):
# My task
with nc.Dataset(self.uas_filepath, 'r') as uas_reader:
wdir = NCdata.wind_dir_from_component(uas_reader)
# Writing out the output
wdir.write(self.output().path)
При вызове self.output()
будет возвращено luigi.LocalTarget("testing/wdir.nc")
оно, а не путь для вывода. Если вам нужен путь, вы должны вызвать self.output().path