이것은 간단한 것일 수 있습니다. argparse를 사용하여 명령 줄 인수 / 옵션을 처리하는 프로그램이 있다고 가정합니다. 다음은 ‘도움말’메시지를 인쇄합니다.
./myprogram -h
또는:
./myprogram --help
그러나 인수없이 스크립트를 실행하면 아무것도하지 않습니다. 내가 원하는 것은 인수없이 호출 될 때 사용법 메시지를 표시하는 것입니다. 어떻게됩니까?
답변
이 답변은 Google 그룹의 Steven Bethard 가 제공합니다 . Google 계정이없는 사용자가 더 쉽게 액세스 할 수 있도록 여기에 다시 게시하고 있습니다.
error
메소드 의 기본 동작을 대체 할 수 있습니다 .
import argparse
import sys
class MyParser(argparse.ArgumentParser):
def error(self, message):
sys.stderr.write('error: %s\n' % message)
self.print_help()
sys.exit(2)
parser = MyParser()
parser.add_argument('foo', nargs='+')
args = parser.parse_args()
위의 솔루션은 error
메소드가 트리거 될 때마다 도움말 메시지를 인쇄합니다 . 예를 들어, 유효한 옵션이 아닌 test.py --blah
경우 도움말 메시지도 인쇄합니다 --blah
.
명령 행에 인수가 제공되지 않은 경우에만 도움말 메시지를 인쇄하려는 경우 여전히 가장 쉬운 방법입니다.
import argparse
import sys
parser=argparse.ArgumentParser()
parser.add_argument('foo', nargs='+')
if len(sys.argv)==1:
parser.print_help(sys.stderr)
sys.exit(1)
args=parser.parse_args()
참고 parser.print_help()
기본적으로 표준 출력으로 인쇄합니다. init_js가 제안 했듯이 parser.print_help(sys.stderr)
stderr에 인쇄하는 데 사용하십시오 .
답변
클래스를 작성하는 대신 try / except를 대신 사용할 수 있습니다.
try:
options = parser.parse_args()
except:
parser.print_help()
sys.exit(0)
단점은 워크 플로가 더 명확하고 스텁 클래스가 필요 없다는 것입니다. 단점은 첫 번째 ‘사용’줄이 두 번 인쇄된다는 것입니다.
이것은 적어도 하나의 필수 주장이 필요합니다. 필수 인수가 없으면 명령 행에서 0 개의 인수를 제공하는 것이 유효합니다.
답변
argparse를 사용하면 다음을 수행 할 수 있습니다.
parser.argparse.ArgumentParser()
#parser.add_args here
#sys.argv includes a list of elements starting with the program
if len(sys.argv) < 2:
parser.print_usage()
sys.exit(1)
답변
스크립트를 실행하기 위해 지정해야하는 인수가있는 경우 다음 과 같이 ArgumentParser에 필요한 매개 변수를 사용하십시오 .
parser.add_argument('--foo', required=True)
인수없이 스크립트를 실행하면 parse_args ()가 오류를보고합니다.
답변
아래 add_subparsers
에 언급 된 것처럼 (하위) 파서에 대한 기본 기능을 연결 하면 간단히 기본 작업으로 추가 할 수 있습니다.
parser = argparse.ArgumentParser()
parser.set_defaults(func=lambda x: parser.print_usage())
args = parser.parse_args()
args.func(args)
위치 인수가 누락되어 예외가 발생하면 try-except를 추가하십시오.
답변
가장 깨끗한 해결책은 명령 줄에 기본 인수가 없으면 수동으로 기본 인수를 전달하는 것입니다.
parser.parse_args(args=None if sys.argv[1:] else ['--help'])
완전한 예 :
import argparse, sys
parser = argparse.ArgumentParser()
parser.add_argument('--host', default='localhost', help='Host to connect to')
# parse arguments
args = parser.parse_args(args=None if sys.argv[1:] else ['--help'])
# use your args
print("connecting to {}".format(args.host))
인수없이 호출되면 완전한 도움말 (짧은 사용법이 아님)을 인쇄합니다.
답변
내 버전을 더미에 던지기 :
import argparse
parser = argparse.ArgumentParser()
args = parser.parse_args()
if not vars(args):
parser.print_help()
parser.exit(1)
당신은 알 수 있습니다 parser.exit
– sys
파일에서 유일한 이유라면 가져 오기 줄을 저장하기 때문에 주로 그렇게 합니다 …