我正在使用以下代码段来解析命令行参数并将它们存储在表中。
var args = initTable[string, string]()
for kind, key, val in getopt():
args.add(key,val)
但是,只有在命令行中传递=
./mytool -i=somefile.txt
在这种情况下,args
为{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
。但我正在寻找更优雅的解决方案。
答案 0 :(得分:2)
argparse
似乎是唯一的Nim程序包,它最终支持POSIX样式的参数解析并自动形成应用程序帮助(使用)文本:
$ ./example -c=settings.cfg
Parsed opts: (config: "settings.cfg", help: false)
$ ./example -c settings.cfg
Parsed opts: (config: "settings.cfg", help: false)
$ ./example -h
example
Usage:
example [options]
Options:
-c, --config=CONFIG Configuration file
-h, --help Show this help
Parsed opts: (config: "", help: true)
来源:
import argparse
let p = newParser("example"):
option("-c", "--config", help="Configuration file")
echo("Parsed opts: ", p.parse(commandLineParams()))
答案 1 :(得分:1)
根据parseopt2的documentation和commandeer问题中的讨论(参见#10),parseopt2只能使用=
或{设置密钥值{1}}除此之外,我不知道是否有适当的'解析选项值的方法。
Commandeer使用选项,其中键和值由空格分隔,方法是检查下一个标记是否为cmdArgument并指定值。
: