2017-01-16 4 views
2

Я пытаюсь выполнить мою программу Python. Он использует один позиционный аргумент. Когда аргумент positional не предоставляется, я хочу распечатать справку. Но все это я получаюПомощь с печатью, когда аргументы позиционирования не предоставляются

error : too few arguments 

Вот код Python:

parser = argparse.ArgumentParser(
     description = '''My Script ''') 
parser.add_argument('I', type=str, help='Provide the release log file') 
args = parser.parse_args() 

Я ожидаю, что следующий вывод, если не указаны позиционные аргументы:

usage: script.py [-h] I 

My Script 

positional arguments: 
    I   Provide the release log file 

optional arguments: 
    -h, --help show this help message and exit 

Любые мысли, КАК это будет оценено по достоинству.

ответ

1

argparse не работает так же. Вам необходимо обратиться за помощью к разделу -h. В противном случае он просто дает usage вместе с сообщением об ошибке.

0015:~/mypy$ python3 stack41671660.py 
usage: stack41671660.py [-h] I 
stack41671660.py: error: the following arguments are required: I 
0015:~/mypy$ python stack41671660.py 
usage: stack41671660.py [-h] I 
stack41671660.py: error: too few arguments 
0015:~/mypy$ python stack41671660.py -h 
usage: stack41671660.py [-h] I 

My Script 

positional arguments: 
    I   Provide the release log file 

optional arguments: 
    -h, --help show this help message and exit 

Вы могли бы сделать позиционную аргумент 'опциональный' с nargs='?' и добавить тест на значение по умолчанию:

print(args) 
if args.I is None: 
    parser.print_help() 

бежит образец:

0016:~/mypy$ python stack41671660.py 
Namespace(I=None) 
usage: stack41671660.py [-h] [I] 

My Script 

positional arguments: 
    I   Provide the release log file 

optional arguments: 
    -h, --help show this help message and exit 
0019:~/mypy$ python stack41671660.py 2323 
Namespace(I='2323') 

Другой вариант заключается, чтобы настроить parser.error, так что он print_help вместо print_usage. Это повлияет на все ошибки синтаксического анализа, а не только на этот недостающий позиционный.

def error(self, message): 
    """error(message: string) 

    Prints a usage message incorporating the message to stderr and 
    exits. 

    If you override this in a subclass, it should not return -- it 
    should either exit or raise an exception. 
    """ 
    # self.print_usage(_sys.stderr) 
    self.print_help(_sys.stderr) 
    args = {'prog': self.prog, 'message': message} 
    self.exit(2, _('%(prog)s: error: %(message)s\n') % args) 

`