如何在 Python Luigi 中使用参数
How to use Parameters in Python Luigi
如何给 Luigi 传递参数?如果我有一个名为 FileFinder.py 的 python 文件和一个名为 getFIles:
的 class
class getFiles(luigi.Task):
我想将一个目录传递给这个 class 例如:
C://Documents//fileName
然后在我的运行方法中使用这个参数
def run(self):
如何在命令行中 运行 添加参数以在我的代码中使用?我习惯于在命令行中 运行 宁这个文件是这样的:
python FileFinder.py getFiles --local-scheduler
我应该在我的代码中添加什么来使用参数,以及如何将该参数添加到命令行参数中?
此外,作为这个问题的延伸,我将如何使用多个参数?或不同数据类型的参数,例如字符串或列表?
所以我认为这可行,在我添加的代码中:
fileName = luigi.Parameter()
如果我 运行 在命令行中这样:
python FileFinder.py getFiles --local-scheduler --getFiles-fileName C://Documents//fileName
但是如果有人对不同类型的参数以及如何使用它们有任何建议,尤其是数字和列表,请告诉我。
如您所知,您可以通过
将参数传递给 luigi
--param-name param-value
在命令行中。在您的代码中,您必须通过实例化 Parameter
class 或其子 class 之一来声明这些变量。 subclasses 用于告诉 luigi 变量是否具有非字符串的 data-type。这是一个使用两个命令行参数的示例,一个 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 转换为元组的,所以如果你想对它们进行列表操作,你必须先将它们转换回来(这是一个 known issue,但看起来不像很快就会修复)。
您可以像这样从命令行调用上述模块(我已将代码保存为名为 "testmodule.py" 的文件并从同一目录中进行调用):
luigi --module testmodule testClass --int-var 3 --list-var '[1,2,3]' --local-scheduler
请注意,对于包含 _
的变量,必须将其替换为 -
。
调用产生(以及许多状态消息):
Integer Param + 1 = 4
List Param with added element: [1, 2, 3, 'new_elem']
添加到 Toterich 的回答中。
将字符串参数列表作为 ListParameter() 传递时:
python file_name.py --local-scheduler TaskName --arg '["a","b"]'
字符串参数必须用 double-quotes 括起来而不是单引号,否则会出现 JSONParsing 错误。
如何给 Luigi 传递参数?如果我有一个名为 FileFinder.py 的 python 文件和一个名为 getFIles:
的 classclass getFiles(luigi.Task):
我想将一个目录传递给这个 class 例如:
C://Documents//fileName
然后在我的运行方法中使用这个参数
def run(self):
如何在命令行中 运行 添加参数以在我的代码中使用?我习惯于在命令行中 运行 宁这个文件是这样的:
python FileFinder.py getFiles --local-scheduler
我应该在我的代码中添加什么来使用参数,以及如何将该参数添加到命令行参数中?
此外,作为这个问题的延伸,我将如何使用多个参数?或不同数据类型的参数,例如字符串或列表?
所以我认为这可行,在我添加的代码中:
fileName = luigi.Parameter()
如果我 运行 在命令行中这样:
python FileFinder.py getFiles --local-scheduler --getFiles-fileName C://Documents//fileName
但是如果有人对不同类型的参数以及如何使用它们有任何建议,尤其是数字和列表,请告诉我。
如您所知,您可以通过
将参数传递给 luigi--param-name param-value
在命令行中。在您的代码中,您必须通过实例化 Parameter
class 或其子 class 之一来声明这些变量。 subclasses 用于告诉 luigi 变量是否具有非字符串的 data-type。这是一个使用两个命令行参数的示例,一个 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 转换为元组的,所以如果你想对它们进行列表操作,你必须先将它们转换回来(这是一个 known issue,但看起来不像很快就会修复)。
您可以像这样从命令行调用上述模块(我已将代码保存为名为 "testmodule.py" 的文件并从同一目录中进行调用):
luigi --module testmodule testClass --int-var 3 --list-var '[1,2,3]' --local-scheduler
请注意,对于包含 _
的变量,必须将其替换为 -
。
调用产生(以及许多状态消息):
Integer Param + 1 = 4
List Param with added element: [1, 2, 3, 'new_elem']
添加到 Toterich 的回答中。
将字符串参数列表作为 ListParameter() 传递时:
python file_name.py --local-scheduler TaskName --arg '["a","b"]'
字符串参数必须用 double-quotes 括起来而不是单引号,否则会出现 JSONParsing 错误。