2017-01-03 4 views
1

У меня есть сценарий Python, который я запускаю из командной строки. Сценарий, который использует sys.argv, необходимы следующие шесть (6) аргументы:Как показать пользователю необходимые аргументы в сценарии Python?

argument 1: the script name (e.g. 'TimeSeries.py') 
argument 2: a configuration file (e.g. 'Customer1.cfg') 
argument 3: whether the resulting data is daily granular or hourly granular (e.g. -d or -h) 
argument 4: which data to retrieve (e.g. -all or -limited) 
argument 5: the number of days in the time series (e.g. '30') 
argument 6: the 'as of' date 

Я запустить этот сценарий несколько раз в день, и поэтому запомнил последовательность аргументов.

Но есть и другие, которые могут запускать сценарий нечасто и не знать требуемых аргументов (и/или последовательности).

Есть ли способ для них запросить список аргументов (вместе с примером каждого аргумента)? Возможно, строка документа?

Спасибо!

+6

Да, используйте модуль [ 'argparse'] (https://docs.python.org/3/library/argparse.html). – Kasramvd

+0

Или попробуйте использовать ['click'] (http://click.pocoo.org/5/). В любом случае ваш скрипт будет жаловаться, если аргументы не будут переданы, и может самоопубликовать, когда пользователь выполняет './script --help'. – wildwilhelm

+0

Если вы не факультативно, обратите внимание на '' перед ним. Поэтому аргумент номер четыре становится «все» или «ограниченным». Ожидание этого в форме варианта противоречит смыслу варианта (al). – BlackJack

ответ

1

Там же несколько вариантов:

  • Используйте Click библиотеку питона и переформатировать сценарий с помощью этого. Это автоматически создает функцию
    --help, которую вы можете использовать. Я лично не использовал это.

  • Используйте argparse из стандартной библиотеки. Например:

import argparse 


def get_parser(): 
    parser = argparse.ArgumentParser(description='Description of your script') 
    parser.add_argument('name', help='The script name (e.g. "TimeSeries.py")', 
         metavar="NAME", type=str) 
    # other arguments here ... 
    return parser 

if __name__ == '__main__': 
    parser = get_parser() 
    args = parser.parse_args() 

Это будет генерировать -h вариант для использования с помощью текста на каждый аргумент. Может сочетаться с моим последним предложением:

  • Добавить docstring в начало страницы с описанием. Если аргумент не задан, распечатайте __doc__. Пример с argparse снова:
""" 
argument 1: the script name (e.g. 'TimeSeries.py') 
argument 2: a configuration file (e.g. 'Customer1.cfg') 
argument 3: whether the resulting data is daily granular or hourly granular (e.g. -d or -h) 
argument 4: which data to retrieve (e.g. -all or -limited) 
argument 5: the number of days in the time series (e.g. '30') 
argument 6: the 'as of' date 
""" 
import argparse 

... # rest of script 

def get_parser(): 
    parser = argparse.ArgumentParser(description=__doc__) 
    parser.add_argument('name', help='The script name (e.g. "TimeSeries.py")', 
         metavar="NAME", type=str) 
    # other arguments here ... 
    return parser 

if __name__ == '__main__': 
    parser = get_parser() 
    args = parser.parse_args() 

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

if not args: # somewhere in your own code 
    print(__doc__) 
    # exit code(?)