Luigi:即使在 运行() 方法中,任务也不会失败,我执行一个不存在的文件

Luigi : The task does not fail even if in the run() method ,i execute a file which does not exist

我是 luigi 的新手,正在探索它的可能性。我遇到了一个问题,其中我使用(需要,运行 和输出方法)定义了任务。在 运行() 中,我正在执行一个文件的内容。

但是,如果文件不存在,任务不会失败。有什么我想念的吗?

import luigi
import logging
import time
import sys, os

logging.basicConfig(filename='Execution.log',level=logging.DEBUG)
date = time.strftime("%Y%m%d")

class CreateTable(luigi.Task):
    def run(self):
        os.system('./createsample.hql')
#       with self.output().open('w') as f:
#               f.write('Completed')

    def output(self):
        return luigi.LocalTarget('/tmp/CreateTable_Success_%s.csv' % date)

输出:

信息:[pid 15553] Worker Worker(salt=747259359, workers=1, host=host-.com, username=root, pid=15553) 运行ning CreateTable() sh: ./createsample.hql: 没有那个文件或目录 信息:[pid 15553] Worker Worker(salt=747259359, workers=1, host=host-.com, username=root, pid=15553) done CreateTable() DEBUG: 1 运行ning 任务,等待下一个任务完成 信息:通知调度程序任务 CreateTable__99914b932b 的状态为完成

从技术上讲,您的代码可以正常工作,并且您工作的 Python 部分 运行 成功。问题是您正在执行一个失败的系统调用,因为该文件不存在。 这里需要做的是检查系统调用的return代码。 Return 代码 0 表示 运行 成功。任何其他结果将产生非零 return 代码:

rc = os.system('./createsample.hql')
if rc:
    raise Exception("something went wrong")

您可能希望使用 subprocess 模块进行系统调用以获得更大的灵活性(和复杂性):https://docs.python.org/2/library/subprocess.html