如何在NIM中通过命令行正确传递参数?

时间:2017-07-14 10:14:28

标签: parameter-passing nim

我正在使用以下代码段来解析命令行参数并将它们存储在表中。

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。但我正在寻找更优雅的解决方案。

2 个答案:

答案 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的documentationcommandeer问题中的讨论(参见#10),parseopt2只能使用=或{设置密钥值{1}}除此之外,我不知道是否有适当的'解析选项值的方法。

Commandeer使用选项,其中键和值由空格分隔,方法是检查下一个标记是否为cmdArgument并指定值。

: