передавайте аргументы без параметров при использовании argparse

#python-3.x

Вопрос:

Я хочу использовать argparse только для отображения справки и использования и ничего больше.

Мой текущий код выглядит так:

 import argparse
parser = argparse.ArgumentParser(prog='remove-duplicate-lines-except-blank-lines',
                                 usage='%(prog)s [options] [files...]',
                                 description='Remove duplicate line except white space')
args = parser.parse_args()
 

Чтобы получить помощь, я могу бежать:

 $ python origname.py -h
 

и

 $ python origname.py --help
 

Пока все идет хорошо. Однако, когда я пытаюсь использовать имена файлов без параметров, например:

 $ python origname.py inputfile.txt optputfile.txt
 

Если дает мне использование и ошибку.

 usage: origname [options] [files...]
origname: error: unrecognized arguments: inputfile.txt optputfile.txt
 

Как я могу передавать аргументы без параметров при использовании argparse?

Просто для ясности, я разбираюсь с остальной частью аргумента (напр. inputfile.txt optputfile.txt) и т.д. вручную sys.argv , так что для этого мне не нужен argparse.

Комментарии:

1. почему вы обращаетесь с ним с помощью sys.argv , а не с argparse помощью ? это кажется нелогичным

2. @gold_cy это сценарий устаревшего кода. Я хочу использовать argparse для создания --help , не хочу трогать остальную часть кода.

Ответ №1:

Вместо использования parser.parse_args() используйте parser.parse_known_args() .

 import argparse
parser = argparse.ArgumentParser(prog='remove-duplicate-lines-except-blank-lines',
                                 usage='%(prog)s [options] [files...]',
                                 description='Remove duplicate line except white space')
parser.parse_known_args()
 

 ==>python foo.py --help
usage: remove-duplicate-lines-except-blank-lines [options] [files...]

Remove duplicate line except white space

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


==>python foo.py foo.txt
# nothing happens here