如何使用 `argparse` 为 nim 设置可变数量的参数
how to have a variable number of parameters using `argparse` for nim
我今天开始学习 nim,所以欢迎任何建议。
我尝试使用 argparse,认为它与 Python 的库的相似性会让我的生活变得轻松。
我想要一个具有此界面的应用程序:
tool [options] File1 File2 ... FileN
我的解析器对象是这样的:
var p = newParser(prog):
help("Dereplicate FASTA (and FASTQ) files, print dereplicated sorted by cluster size with ';size=NNN' decoration.")
flag("-k", "--keep-name", help="Do not rename sequence, but use the first sequence name")
flag("-i", "--ignore-size", help="Do not count 'size=INT;' annotations (they will be stripped in any case)")
option("-m", "--min-size", help="Print clusters with size equal or bigger than INT sequences", default="0")
option("-p", "--prefix", help = "Sequence name prefix", default = "seq")
option("-s", "--separator", help = "Sequence name separator", default = ".")
flag("-c", "--size-as-comment", help="Print cluster size as comment, not in sequence name")
arg("inputfile", help="Input file")
我正在寻找类似 nargs="+"
的东西,但据我所知,应该是一个整数,但我不知道如何指定任意数量的输入。
谢谢!
PS:
- 我用来实验的工具是 here
您可以添加 nargs=-1
:
import os
import argparse
proc main(args: seq[string]) =
var par = newParser("My Program"):
option("--arg1")
arg("files", nargs = -1)
var opts = par.parse(args)
echo "Opts: ", opts.arg1
echo "Files: ", opts.files
# For a command like `cmd --arg1=X file1 file2, echoes
# Opts: X
# Files: @[file1, file2]
when isMainModule:
main(commandLineParams())
如果需要,至少说一个 FASTA,但可能还有更多,语法如下:
var par = newParser("My Program"):
option("--arg1")
arg("firstFile")
arg("otherFiles", nargs = -1)
现在 par.firstFile
包含第一个文件的字符串,par.otherFiles
包含 seq[string]
和其余文件。
记住 Nim 有它自己的 command line parser,一开始看起来有点复杂,但对于简单的事情它可能很有用:
import os
import parseopt
proc main(args: seq[string]) =
var par = initOptParser(args)
var files: seq[string]
for kind, key, val in args.getopt():
case kind
of cmdLongOption, cmdShortOption:
# Here you deal with options like --option and -o
discard
of cmdArgument:
# Here, any extra argument is added to the seq
files.add key
of cmdEnd: assert(false)
echo files
when isMainModule:
main(commandLineParams())
我今天开始学习 nim,所以欢迎任何建议。
我尝试使用 argparse,认为它与 Python 的库的相似性会让我的生活变得轻松。
我想要一个具有此界面的应用程序:
tool [options] File1 File2 ... FileN
我的解析器对象是这样的:
var p = newParser(prog):
help("Dereplicate FASTA (and FASTQ) files, print dereplicated sorted by cluster size with ';size=NNN' decoration.")
flag("-k", "--keep-name", help="Do not rename sequence, but use the first sequence name")
flag("-i", "--ignore-size", help="Do not count 'size=INT;' annotations (they will be stripped in any case)")
option("-m", "--min-size", help="Print clusters with size equal or bigger than INT sequences", default="0")
option("-p", "--prefix", help = "Sequence name prefix", default = "seq")
option("-s", "--separator", help = "Sequence name separator", default = ".")
flag("-c", "--size-as-comment", help="Print cluster size as comment, not in sequence name")
arg("inputfile", help="Input file")
我正在寻找类似 nargs="+"
的东西,但据我所知,应该是一个整数,但我不知道如何指定任意数量的输入。
谢谢!
PS:
- 我用来实验的工具是 here
您可以添加 nargs=-1
:
import os
import argparse
proc main(args: seq[string]) =
var par = newParser("My Program"):
option("--arg1")
arg("files", nargs = -1)
var opts = par.parse(args)
echo "Opts: ", opts.arg1
echo "Files: ", opts.files
# For a command like `cmd --arg1=X file1 file2, echoes
# Opts: X
# Files: @[file1, file2]
when isMainModule:
main(commandLineParams())
如果需要,至少说一个 FASTA,但可能还有更多,语法如下:
var par = newParser("My Program"):
option("--arg1")
arg("firstFile")
arg("otherFiles", nargs = -1)
现在 par.firstFile
包含第一个文件的字符串,par.otherFiles
包含 seq[string]
和其余文件。
记住 Nim 有它自己的 command line parser,一开始看起来有点复杂,但对于简单的事情它可能很有用:
import os
import parseopt
proc main(args: seq[string]) =
var par = initOptParser(args)
var files: seq[string]
for kind, key, val in args.getopt():
case kind
of cmdLongOption, cmdShortOption:
# Here you deal with options like --option and -o
discard
of cmdArgument:
# Here, any extra argument is added to the seq
files.add key
of cmdEnd: assert(false)
echo files
when isMainModule:
main(commandLineParams())