2016-03-20 6 views
1

Я пытаюсь реализовать базовую функциональность командной строки.Передать результат click.command другой функции

Поэтому мне нужно иметь возможность передавать файл в качестве аргумента, читать его и передавать результат дальше.

Но по какой-то причине он не работает должным образом.

import click 


@click.command() 
@click.argument('arg', nargs=1, type=click.File('r')) 
def touch(arg): 
    return len(arg.readlines()) 


def fill(): 
    print touch() 


if __name__ == '__main__': 
    fill() 

Нет выхода. Но кажется touch() выполняется с учетом того случая, если я добавляю оператор печати в touch() Я могу видеть некоторые материалы в выводе.

+0

Как вы можете выполнить 'касание()' без аргументов, если в вас определении там требуется ли? – Ilja

+0

@Ilja 'click' обрабатывает то, что под капотом –

ответ

1

К сожалению, использование кликов делает его таким, чтобы ваша функция никогда не возвращала значения. вы можете использовать click.echo для печати значений в интерфейсе, но вы не можете вернуть какие-либо значения по мере их завершения, когда выполнение функции завершено. Другими словами, он больше не работает как функция после того, как вы завернете его с помощью click.command, но вместо этого превратитесь в программу командной строки.

Вы также можете использовать optparse для достижения того, чего вы пытаетесь достичь.

Ресурсы - https://docs.python.org/2/library/optparse.html

Edit: - Я нашел подобный вопрос здесь, вы можете также использовать это в качестве ссылки - How do I return a value when @click.option is used to pass a command line argument to a function?

Смежные вопросы