При использовании библиотеки Ruffus в Python 2.7 флаг just_print не работает

У меня есть конвейер ерша в Python 2.7, но когда я вызываю его с -n или же --just_print он по-прежнему выполняет все текущие задачи, а не просто печатает конвейер, как это должно быть. Я:
* нет -n аргумент, который заменит встроенный (хотя у меня есть другие аргументы командной строки)
* есть куча функций с @transform() или же @merge() декораторов
* закончить трубопровод с run_pipeline() вызов

Кто-нибудь еще испытывал эту проблему? Большое спасибо!

1 ответ

Решение

Начиная с версии 2.4, вы можете использовать встроенный ruffus.cmdline который хранит соответствующие флаги через cmdline.py модуль, который использует argparse, например:

from ruffus import *
parser = cmdline.get_argparse(description='Example pipeline')
options = parser.parse_args()

@originate("test_out.txt")
def run_testFunction(output):
        with open(output,"w") as f:
            f.write("it's working!\n")

cmdline.run(options)

Затем запустите ваш конвейер из терминала с помощью команды:

python script.py --verbose 6 --target_tasks run_testFunction --just_print

Если вы хотите сделать это вручную вместо этого (что необходимо для более старой версии ruffus), вы можете позвонить pipeline_printout() скорее, чем pipeline_run(), с помощью argparse таким образом --just_print флаг приводит к соответствующему вызову, например:

from ruffus import *
import argparse
import sys

parser = argparse.ArgumentParser(description='Example pipeline')
parser.add_argument('--just_print', dest='feature', action='store_true')
parser.set_defaults(feature=False)
args = parser.parse_args()

@originate("test_out.txt")
def run_testFunction(output):
        with open(output,"w") as f:
            f.write("it's working!\n")

if args.feature:
    pipeline_printout(sys.stdout, run_testFunction, verbose = 6)
else:
    pipeline_run(run_testFunction, verbose = 6)

Затем вы должны выполнить команду как:

python script.py --just_print
Другие вопросы по тегам