2017-01-26 10 views
2

Как передать параметры Luigi? если у меня есть файл с именем питона FileFinder.py с классом по имени GetFiles:Как использовать параметры в Python Luigi

class getFiles(luigi.Task):

и я хочу перейти в каталог этого класса, такие как:

C://Documents//fileName

, а затем использовать этот параметр в моем методе выполнения

def run(self):

как запустить это в командной строке и добавить параметр для использования в моем коде? Я привык запуска этого файла в командной строке так:

python FileFinder.py getFiles --local-scheduler

Что я могу добавить к моему коду, чтобы использовать параметр, и как я могу добавить, что параметр в командной строке в качестве аргумента?

Кроме того, как расширение этого вопроса, как использовать несколько аргументов? или аргументы разных типов данных, таких как строки или списки?

ответ

1

Так что я думаю, что это работает, в коде я добавил:

fileName = luigi.Parameter() 

если я запускаю это в командной строке:

python FileFinder.py getFiles --local-scheduler --getFiles-fileName C://Documents//fileName 

, но если у кого есть какие-либо рекомендации по параметрам различных типов и как их использовать, особенно цифры и списки, пожалуйста, дайте мне знать.

3

Как вы уже поняли, вы можете передать аргументы Luigi через

--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, так что если вы хотите, чтобы сделать список операций на них, вы должны преобразовать сначала они возвращаются (это 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'] 
+0

Можете ли вы описать, что делает модуль из кода означает?Я не понимаю, что такое my_module и как запускать этот код вместе с другими параметрами, отличными от списка, потому что я хотел бы иметь возможность использовать как одиночные строковые параметры, так и параметры списка. –

+0

. В модуле не было необходимости отвечать на ваши вопрос, поэтому я удалил его из своего ответа. Обновленный ответ должен охватывать все, что вам нужно. – Toterich

+0

Есть ли способ запустить это без командной строки args? Я вызываю luigi изнутри кода python и имею объект списка, который хотел бы передать. Кажется, я могу сделать что-то вроде 'testClass (1, [1,2]). Run()', но не уверен, что это лучше всего. – citynorman