다음 코드 조각을 사용하여 명령 줄 인수를 구문 분석하고 테이블에 저장합니다.
var args = initTable[string, string]()
for kind, key, val in getopt():
args.add(key,val)
그러나 =
명령 줄을 전달 하는 경우에만 작동합니다.
./mytool -i=somefile.txt
이 경우 args
is {i: somefile.txt}
, 내가 원하는 것입니다 (키 : 값 쌍).
하지만 사용하는 경우 ./mytool -i somefile.txt
그 다음 args
이다 {somefile.txt: , i: }
나는 (두 키와 값 없음)을 기대하는 것을 확실히이다.
사용하지 않고 인수를 구문 분석하는 적절한 방법은 무엇입니까 =
?
다음은 두 가지 경우의 종류, 키 및 발 출력입니다.
$ ./diceof -a=ACTGCTGTGTGCACAGTGTCACGTGT -b=ACTGCTGTGTGCACAGTGTCACGTGa
kind:cmdShortOption
key :a
val :ACTGCTGTGTGCACAGTGTCACGTGT
kind:cmdShortOption
key :b
val :ACTGCTGTGTGCACAGTGTCACGTGa
$ ./diceof -a ACTGCTGTGTGCACAGTGTCACGTGT -b ACTGCTGTGTGCACAGTGTCACGTGa
kind:cmdShortOption
key :a
val :
kind:cmdArgument
key :ACTGCTGTGTGCACAGTGTCACGTGT
val :
kind:cmdShortOption
key :b
val :
kind:cmdArgument
key :ACTGCTGTGTGCACAGTGTCACGTGa
val :
물론 이전에 val
다음 key
을 추가하지 않으면 발견 여부를 확인할 수 있습니다 val
. 하지만 더 우아한 솔루션을 찾고 있습니다.
parseopt2 에 대한 문서 와 사령관 의 문제 에 대한 논의 (# 10 참조)를 기반으로 parseopt2는 옵션을 구문 분석하는 '적절한'방법이 있는지 알 수없는 것 외에는 =
또는 만으로 키 값을 설정할 수 :
있습니다. 가치.
Commandeer는 다음 토큰이 cmdArgument인지 확인하고 값을 할당하여 키와 값이 공백으로 구분되는 옵션을 사용합니다.
var nextToken = cliTokens.pop()
if nextToken.kind == parseopt2.cmdArgument:
try:
assign(nextToken.key)
except ValueError:
exitWithErrorMessage(getCurrentExceptionMsg())
else:
cliTokens.add(nextToken)
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras