2017-11-21 10 views
1

위치 및 선택적 인수를 사용하는 방법을 배우고 있습니다.
내 입력 :파이썬은 argparse로 위치 인수의 길이를 얻습니다.

$ python generate_data.py output --spt google.spt OK-Google.spt --fpx google.fpx OK-Google.fpx 

번호 :

import argparse 
parser = argparse.ArgumentParser(description='Generate an output file from the contents of *.spt and *.fpx.') 
parser.add_argument('output_file') # Number of output files should be 1. 
parser.add_argument('--spt', required=True, nargs='+', help='spt files') # Number of *.spt should be >= 1. 
parser.add_argument('--fpx', required=True, nargs='+', help='fpx files') # Number of *.fpx should be >= 1. 
args = parser.parse_args() 

print(len(args.output_file), len(args.spt), len(args.fpx)) 
if len(args.output_file) != 1 or len(args.spt) != len(args.fpx): 
    parser.print_help() 
    exit(-1) 

outputgenerate_data.py의 출력 파일이며, 출력 파일의 개수는 1
--spt 필요한 인자에 의해 준수되어야 * .spt , 번호는 >= 1이어야합니다.
--fpx은 필수 인수이며 그 뒤에는 * .fpx가 있으며 숫자는 >= 1이어야합니다.

내 질문에 대한 답변은 다음과 같습니다.
1. len(args.output_file) == 6이 있는데, 1이 아닙니다. 사용자가 하나의 출력 파일 만 입력하도록하려면 어떻게해야합니까?
2. 출력 파일을 다음과 같이 명령 줄 끝에 넣을 수도 있습니다.

$ python generate_data.py --spt google.spt OK-Google.spt --fpx google.fpx OK-Google.fpx output 
+0

나는'인쇄 (인수)'에 좋아한다. 그렇게하면 파싱 결과를 기대하지 않고 볼 수 있습니다. 이 경우'otuput_file'은 문자열이 아닌 목록을 보여줍니다. 2) 이상적으로 argparse는 한 문자열을 남은 위치에 예약해야한다는 것을 알아야하지만 그 향상은 여전히 ​​기다리고 있습니다. – hpaulj

답변

2
  1. 그것은 이미 이루어집니다. 시도해보십시오 : 스크립트는 두 개의 파일 이름을 허용하지 않습니다. args.output_file은 문자열이므로 혼란스러워합니다. 귀하의 경우에는 LEN (args.output_file가) 6. 다른 변수가 args.spt이고 당신이 nargs 키워드로 그 인수를 정의하기 때문에 args.fpx가 목록 이유를 설명 (6)의 길이와 파일 이름을 입력. 따라서 len (args.spt)은 목록에있는 항목 수를 반환합니다.

  2. 이것은별로 의미가 없습니다. --fpx와 --spt는 둘 이상의 파일 이름을 사용하기 때문에 명령 행의 마지막에 오는 파일 이름이 마지막 목록에 속하는지 또는 출력 파일의 이름인지 여부를 알 수 없습니다. 파일 이름 확장명을 사용하여 입력 한 파일의 수를 파악하여이 문제를 해결하려면 파일 형식 목록의 자유 형식 입력을 허용하고 argparse 항목을 완전히 없앨 수 있습니다. 디버깅하는 동안