인수 파서를 다시 작성해야합니다. 응용 프로그램에는 콘솔과 그래픽의 두 가지 모드가 있습니다. 하나의 모드 만 선택할 수 있습니다. 최근 콘솔 버전에는 텍스트가있는 파일 이름과 단어가있는 파일 이름의 두 가지 인수가 제공됩니다. 그것은 그렇게 보였다 :argparse를 사용하여 파이썬에서 선택적 인수를 기본값으로 추가하는 방법은 무엇입니까?
def parse_args():
parser = argparse.ArgumentParser(description='Fuzzy search in text')
parser.add_argument('-g', '--graphics', help='graphical version',
action='store_true')
parser.add_argument('-c', '--console', help='console version', nargs=2,
type=argparse.FileType('r'),
metavar=('TEXTFILE', 'WORDSFILE'))
return parser.parse_args()
usage: fuzzy_search.py [-h] [-g] [-c TEXTFILE WORDSFILE]
Fuzzy search in text
optional arguments:
-h, --help show this help message and exit
-g, --graphics graphical version
-c TEXTFILE WORDSFILE, --console TEXTFILE WORDSFILE
console version
이제 콘솔 버전에서 인수 인수를 다시 작성해야한다. 레지스터 감도 (-r)와 특수 뷰 (-v)를 저장하는 두 개의 선택적 인수를 추가하려고합니다. 나는 그것을하는 방법을 안다. 그러나 나는 다음 일로 무엇을해야하는지 이해할 수 없다. 나는 2 가지 변종을 만들고 싶다 : 1) 처음에는 텍스트와 단어가있는 의무적 인 두 개의 파일과 2) 텍스트가있는 필수 파일과 단어가있는 필수 파일이 아닌 필수 파일 인 sys.stdin을 작성해야한다. 그래픽은 인수를 허용해서는 안됩니다. 그것은이
usage: fuzzy_search.py [-h] [-g] [-c [-r] [-v] TEXTFILE WORDSFILE(if not written then sys.stdin)]
과 같아야합니다 그래서 나는이 변형 시도 :
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(help='versions')
parser_console = subparsers.add_parser('console', help='console version')
parser_console.add_argument('-r', '--register-check', action='store_true', help='register sensitivity')
parser_console.add_argument('-v', '--row-view', action='store_true', help='row view')
parser_console.add_argument('TEXTFILE', type=argparse.FileType('r'), help='text file')
parser_console.add_argument('--WORDSFILE', type=argparse.FileType('r'), default=sys.stdin, help='words file')
parser_graphics = subparsers.add_parser('graphics', help='graphics version')
을하지만이
print(parser.parse_args(['console', '-r', '-v', 'text.txt','words.txt']))
을 시도 할 때 오류가 발생했습니다 :
unrecognized arguments: words.txt
와 이
print(parser.parse_args(['console', '-r', '-v', 'text.txt']))
모든 것이 괜찮 :
그래서Namespace(TEXTFILE=<_io.TextIOWrapper name='text.txt' mode='r' encoding='cp1251'>, WORDSFILE=<_io.TextIOWrapper name='<stdin>' mode='r' encoding='UTF-8'>, register_check=True, row_view=True)
문제 어딘가에 선택적 인수 WORDSFILE 및 기본값입니다. 그것을 고치는 방법?
대시없이'TEXTFILE'가 위치합니다. '--WORDSFILE'에는 파일 이름 외에 플래그 문자열이 필요합니다 (그렇지 않으면 기본값이 사용됩니다). – hpaulj