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

ale*_*inn 4 parameter-passing nim-lang

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

var args = initTable[string, string]()
for kind, key, val in getopt():
    args.add(key,val)
Run Code Online (Sandbox Code Playgroud)

=但是,只有当我传入命令行时它才有效

./mytool -i=somefile.txt
Run Code Online (Sandbox Code Playgroud)

在本例中,argsis {i: somefile.txt},这就是我想要的(键:值对)。

但如果我使用./mytool -i somefile.txtthen argsis {somefile.txt: , i: },这绝对不是我所期望的(两个键,没有值)。

不使用 解析参数的正确方法是什么=

这是两种情况下 kind、key 和 val 的打印输出:

$ ./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 :
Run Code Online (Sandbox Code Playgroud)

当然,我可以检查是否val找到,如果没有添加上一个的下key一个val。但我正在寻找更优雅的解决方案。

lua*_*art 5

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)
Run Code Online (Sandbox Code Playgroud)

来源:

$ ./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)
Run Code Online (Sandbox Code Playgroud)