2014-07-06 1 views
0

python 3.4에서 args.parse와 관련된 이상한 문제가 있습니다. 도움이 필요합니다. 나는 파이썬으로 시작하고있다. 그래서 그것은 어리 석다.python argsparse 데이터 형식

나는 그것은 단지 하나의 인수, 모든 시간을해야 인수를

parser.add_argument('-solr', type=str, default='http://localhost:8983/solr/', nargs='+', help='Address of Solr server (ex: http://192.168.137.128:8983/solr/)') 

을 전달하고있다. 인수를 실제로 전달하면 배열로 저장되며 args.solr [0]을 통해 액세스해야합니다. 그러나 인수를 전달하지 않으면 기본값이 사용되지만 문자열로 저장되므로 args.solr [0]은 'h'가됩니다.

무엇을 제공합니까? nargs로 놀아 보려고했지만 1로 설정해도 아무 것도 바뀌지 않는 것 같습니다. 사전

답변

0

. 플래그. 자열을 사용하지 않으면 선택적입니다 (필수는 아 U니다). 이와

parser.add_argument('--solr', default='http://localhost:8983/solr/', 
    help='Address of Solr server (ex: %(default)s)') 

은 샘플 입력은 생산 :

In [51]: parser.parse_args([]) 
Out[51]: Namespace(solr='http://localhost:8983/solr/') 

In [52]: parser.parse_args(['--solr','test']) 
Out[52]: Namespace(solr='test') 

In [50]: parser.print_help() 
usage: ipython [-h] [--solr SOLR] 

optional arguments: 
  -h, --help   show this help message and exit 
  --solr SOLR  Address of Solr server (ex: http://localhost:8983/solr/) 

이상 선택 이름으로하는 ---보다 낫다. 기본 유형은 str이므로이를 지정할 필요가 없습니다. 도움말에 %(default)s을 추가 했으므로 기본값을 반복하지 않아도됩니다.

결과를 목록 (예 : ['test']을 입력하고 nargs=1을 사용하고 목록에 기본값을 입력하십시오. default=['http...'].

+0

고마워, 훌륭한 설명. – user2630270

1

사용 nargs = '?'에서

감사합니다. 입력을 배열로 가져가는 것을 중단했습니다. 기본 None을 사용 - 당신의 인수는 전혀 nargs을 설정할 필요가 없습니다 (이름은 -로 시작) 플래그 때문에

parser.add_argument('--solr', type=str, default='http://localhost:8983/solr/',nargs='?',help='Address of Solr server (ex: http://192.168.137.128:8983/solr/)')

+0

'nargs = '?''는 옵션을 사용하는 것보다 positionals에서 더 유용합니다. - 어떤 인자도없이'--solr'을 의미하지 않는다면. – hpaulj