如何将参数传递给Luigi?如果我有一个名为FileFinder.py的python文件,其中包含一个名为getFIles的类:
class getFiles(luigi.Task):
我想将目录传递给这个类,例如:
C://Documents//fileName
然后在我的run方法中使用此参数
def run(self):
如何在命令行中运行它并添加参数以便在我的代码中使用?我习惯于在命令行中运行这个文件,如下所示:
python FileFinder.py getFiles --local-scheduler
我将什么添加到我的代码中以使用参数,以及如何将该参数添加到命令行参数?
另外,作为这个问题的扩展,我将如何使用多个参数?或不同数据类型的参数,如字符串或列表?
正如您已经想到的那样,您可以将参数传递给luigi via
--param-name param-value
在命令行中.在代码中,您必须通过实例化Parameter
类或其中一个子类来声明这些变量.子类用于告诉luigi变量是否具有非字符串的数据类型.下面是一个使用两个命令行参数的示例,一个Int
和一个List
:
import luigi class testClass(luigi.Task): int_var = luigi.IntParameter() list_var = luigi.ListParameter() def run(self): print('Integer Param + 1 = %i' % (self.int_var + 1)) list_var = list(self.list_var) list_var.append('new_elem') print('List Param with added element: ' + str(list_var))
请注意,ListParams实际上已被luigi转换为元组,因此如果要对它们执行列表操作,则必须先将它们转换回来(这是一个已知问题,但看起来不会很快修复).
您可以从命令行调用上面的模块(我已将代码保存为名为"testmodule.py"的文件,并从同一目录中调用):
luigi --module testmodule testClass --int-var 3 --list-var '[1,2,3]' --local-scheduler
请注意,对于包含a的变量_
,必须将其替换为-
.通话产生(以及许多状态消息):
Integer Param + 1 = 4 List Param with added element: [1, 2, 3, 'new_elem']