用于在TCL中解析参数的包
有人知道tcl可以轻松解析输入参数的标准包吗?还是一个现成的程序?(我只有3个标志,但最好是通用的)。Tcllib有这样一个包。这有点文档不足,但它是有效的。包括一个示例。下面是一个简单的例子:用于在TCL中解析参数的包,tcl,command-line-arguments,Tcl,Command Line Arguments,有人知道tcl可以轻松解析输入参数的标准包吗?还是一个现成的程序?(我只有3个标志,但最好是通用的)。Tcllib有这样一个包。这有点文档不足,但它是有效的。包括一个示例。下面是一个简单的例子: package require cmdline set parameters { {server.arg "" "Which server to search"} {debug "Turn on debugging, default=off"} } set u
package require cmdline
set parameters {
{server.arg "" "Which server to search"}
{debug "Turn on debugging, default=off"}
}
set usage "- A simple script to demo cmdline parsing"
array set options [cmdline::getoptions ::argv $parameters $usage]
parray options
运行示例:
$ tclsh simple.tcl
options(debug) = 0
options(server) =
$ tclsh simple.tcl -server google.com
options(debug) = 0
options(server) = google.com
$ tclsh simple.tcl -server google.com -debug
options(debug) = 1
options(server) = google.com
$ tclsh simple.tcl -help
simple - A simple script to demo cmdline parsing
-server value Which server to search <>
-debug Turn on debugging, default=off
-help Print this message
-? Print this message
while executing
"error [usage $optlist $usage]"
(procedure "cmdline::getoptions" line 15)
invoked from within
"cmdline::getoptions ::argv $parameters $usage"
invoked from within
"array set options [cmdline::getoptions ::argv $parameters $usage]"
(file "simple.tcl" line 11)
样本运行2:
$ tclsh simple.tcl -?
simple - A simple script to demo cmdline parsing
-server value Which server to search <>
-debug Turn on debugging, default=off
-help Print this message
-? Print this message
$tclsh simple.tcl-?
simple-演示cmdline解析的简单脚本
-要搜索的服务器的服务器值
-调试打开调试,默认值=关闭
-帮助打印此邮件
-? 打印此邮件
这是一个简单的、本机的、无包参数解析器:
#
# arg_parse simple argument parser
# Example `arg_parse {help version} {with-value} {-with-value 123 positional arguments}`
# will return:
# `positionals {positional arguments} with-value 123`
#
# @param boolean_flags flags which does not requires additional arguments (like help)
# @param argument_flags flags which requires values (-with-value value)
# @param args the got command line arguments
#
# @return stringified array of parsed arguments
#
proc arg_parse { boolean_flags argument_flags args } {
set argsarr(positionals) {}
for {set i 0} {$i < [llength $args]} {incr i} {
set arg [lindex $args $i]
if { [sstartswith $arg "-" ] } {
set flag [string range $arg 1 end]
if { [lsearch $boolean_flags $flag] >= 0 } {
set argsarr($flag) 1
} elseif { [lsearch $argument_flags $flag] >= 0 } {
incr i
set argsarr($flag) [lindex $args $i]
} else {
puts "ERROR: Unknown flag argument: $arg"
return
}
} else {
lappend argsarr(positionals) $arg
}
}
return [array get argsarr]
}
使用我的超棒程序:
% my_awesome_proc -help
argsarr(help) = 1
argsarr(positionals) =
% my_awesome_proc -with-value 123
argsarr(positionals) =
argsarr(with-value) = 123
% my_awesome_proc -wrong
ERROR: Unknown flag argument: -wrong
% my_awesome_proc positional arguments
argsarr(positionals) = positional arguments
%
非常感谢,有什么方法可以声明必需的参数和可选的参数吗?没有指定必需的参数的规定——一切都是可选的。您必须根据默认值测试每个选项,以确定命令行中是否缺少某个选项。好的,最后一个问题-是否有支持的显示帮助菜单/用法的方法?我已更新以删除指定给
-debug
的默认值以修复帮助输出。。。现在,我想知道是否有办法将布尔参数的默认值设置为1
。该库似乎接受使用+debug
语法将此类选项设置为0
。我刚刚尝试添加1
作为debug
的默认值,但默认值仍然是0
,cmdline使用1
作为帮助说明。我猜这样的参数不能设置默认值,默认值总是0
。想要3个标志都有这样的行为就像用炸弹杀死一只苍蝇一样!
#
# USE argument parser:
#
proc my_awesome_proc { args } {
array set argsarr [arg_parse "help version" "with-value" {*}$args]
parray argsarr
}
% my_awesome_proc -help
argsarr(help) = 1
argsarr(positionals) =
% my_awesome_proc -with-value 123
argsarr(positionals) =
argsarr(with-value) = 123
% my_awesome_proc -wrong
ERROR: Unknown flag argument: -wrong
% my_awesome_proc positional arguments
argsarr(positionals) = positional arguments
%