저는이 모듈을 처음 접했으므로 참아주세요. 다음 코드가 있습니다.
import argparse
parent_parser = argparse.ArgumentParser(description="Read text files.")
parent_parser.add_argument('filename', help='TXT file', type=file, nargs='+')
parent_parser.add_argument('--verbose', '-v', action='store_true',
help="Verbosity on")
child_parser = parent_parser.add_subparsers(title="subcommand",
help="Subcommand help")
new_file_command = child_parser.add_parser('new', help="New text file")
edit_file_command = child_parser.add_parser('edit', help="Edit existing text file")
args = parent_parser.parse_args()
내가 달성하려는 것은 파서와 유닉스 명령 줄 유틸리티가 작동하는 방식의 표준 방식이 아닐 수도 있습니다. 그것이 사실이라면 표준화 된 앱을 갖고 싶어서 정정 해주세요.
이것이 내가 달성하려는 것입니다.
python reader.py some.txt
그냥 구문 분석하고 텍스트 파일을 읽는 함수에 전달할 수 있기를 원합니다. 물론 선택적 인수 verbose
도 허용하고 싶습니다.new_file_command
) 를 실행하면 위치 인수 filename
가 필요하지 않고 대신 문자열을 전달하고 다음과 같은 새 텍스트 파일을 만들고 싶습니다.python reader.py new another.txt
edit_file_command
) 를 실행하면 기존 파일을 경로에 전달하고 ( type=int
에서 사용하는 것과 같이) 확인한 add_argument
다음 다음과 같이 편집기를 여는 함수에 전달할 수 있습니다.python reader.py edit some.txt
다시 말하지만 이것이 명령 줄 앱 / 스크립트가 어떻게 작동해야하는지 확실하지 않습니다. 나는 문서를 읽고 예제를 보았지만 여전히 하위 파서가 어떻게 작동하는지 명확하지 않습니다. 클릭 모듈을 살펴 보았지만 더 복잡해 보입니다.
도움을 주시면 감사하겠습니다. 감사!
따라서 세 가지 샘플 호출은 다음과 같습니다.
python reader.py some.txt
python reader.py new another.txt
python reader.py edit some.txt
이를 처리하는 가장 쉬운 방법은 하나의 '선택적'위치와 하나의 필수 위치를 사용하는 것입니다.
parser = ArgumentParser...
parser.add_argument('-v','--verbose', ...)
parser.add_argument('cmd', nargs='?', default='open', choices=['open','edit','new'])
parser.add_argument('filename')
3 개의 샘플에 대해 다음과 같은 결과가 생성됩니다.
namespace(cmd='open', filename='some.txt')
namespace(cmd='new', filename='another.txt')
namespace(cmd='edit', filename='some.txt')
cmd
선택적 위치 인수입니다. 이 누락 된 경우 하나 개의 문자열에 할당됩니다 filename
, 그리고 cmd
그것의를 가져옵니다 default
. subparsers
선택 사항을 만드는 것보다이 작업을 수행하는 것이 더 쉽습니다 .
현재 파서의 경우 :
parent_parser = argparse.ArgumentParser(description="Read text files.")
parent_parser.add_argument('filename', help='TXT file', type=file, nargs='+')
사용하지 않는 것이 좋습니다 type=file
. 더 나은 사용하기 FileType
또는 기본 문자열 (수 있습니다 당신은 파일을 열 with context
이상).
에 관해서 nargs='+'
는 정말 1 or more
문자열을 할당 filename
하시겠습니까? 아니면 '?'를 생각하고 계 0 or 1
셨나요?
parent_parser.add_argument('--verbose', '-v', action='store_true',
help="Verbosity on")
child_parser = parent_parser.add_subparsers(title="subcommand",
help="Subcommand help")
new_file_command = child_parser.add_parser('new', help="New text file")
edit_file_command = child_parser.add_parser('edit', help="Edit existing text file")
이 혼합 filename
subparsers 인수, 값의 가변 수를 받아들이는 위치를 (a 위치하는 것을 기대하는 하나 new
또는 edit
) 문제가 될 수있다.
나는 'python reader.py some.txt'
subparser 명령이 없다는 것을 반대 할 것으로 예상 한다. , 및 하위 구문 분석기 'python reader.py new another.txt'
에 할당 new
을 시도 하고 오류를 발생시킵니다.filename
another.txt
다음 세 가지 경우 모두에서 subparsers 명령을 기대하는 것이 좋습니다.
parent_parser = argparse.ArgumentParser(description="Read text files.")
parent_parser.add_argument('--verbose', '-v', action='store_true',
help="Verbosity on")
child_parser = parent_parser.add_subparsers(title="subcommand",
help="Subcommand help", dest='cmd')
open_file_command = child_parser.add_parser('open', help="Open text file")
open_file_command.add_argument('filename', help='TXT file')
new_file_command = child_parser.add_parser('new', help="New text file")
new_file_command.add_argument('filename', help='TXT file')
edit_file_command = child_parser.add_parser('edit', help="Edit existing text file")
edit_file_command.add_argument('filename', help='TXT file')
'open', 'new', 'edit'의 각 명령에는 'filename'이 필요합니다.
open
명령을 사용하지 않으려는 것은 가치가있는 것보다 더 많은 어려움을 초래할 것입니다.
(최신 argparse에는 하위 구문 분석기를 선택적으로 만드는 버그 / 기능이 있지만 실제로 문제를 모르고서는이를 이용해서는 안됩니다.)
와:
parser = argparse.ArgumentParser()
parser.add_argument('-v', '--verbose')
parser.add_argument('cmd', nargs='?', default='open',
choices=['open', 'edit', 'new'])
parser.add_argument('filename', nargs='+')
나는 reader.py new customstring
줄 것으로 기대 한다
namespace(cmd='new', filename=[customstring])
다음과 같이 사용할 수 있습니다.
if args.cmd=='new':
with open(args.filename[0] + '.txt', 'w') as f:
# do something with the newly created file
open
및 edit
다른 사용합니다 open
모드.
Py3에서는 subparsers
필요하지 않습니다. 즉, 하위 명령 중 하나가 제공되지 않으면 오류가 발생하지 않습니다. 이는 초기 버전에서 의도 치 않게 변경된 것입니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다