Warm tip: This article is reproduced from serverfault.com, please click

其他-TCL中用于解析参数的程序包

(其他 - package for parsing argument in TCL)

发布于 2014-06-21 11:30:20

有谁知道tcl可以轻松解析输入参数的标准软件包?或准备好了吗?(我只有3个标志,但最好是一般性的标志)。

Questioner
Foad Rezek
Viewed
11
768 2017-06-01 13:58:58

文档包括一个示例。这是一个简单的示例:

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)

讨论

  • 与大多数Linux实用程序不同,TCL在命令行选项中使用单破折号而不是双破折号
  • 当标志以.arg结尾时,则该标志期望后面跟随一个参数,例如在server.arg的情况下
  • 调试标志不会结束.arg,因此它并不期望任何参数
  • 用户通过列表列表定义命令行参数。每个子列表包含2或3部分:
    • 标志(例如debug
    • 默认值(例如0),仅当参数带有参数时(标志以结束.arg)。
    • 和帮助信息
  • 使用-help调用用法/帮助-?,但是输出效果不佳,请参阅上一个示例运行。

更新:帮助/用法

我一直在思考用户调用帮助时的消息输出(请参阅上面运行的最后一个示例)。为了解决这个问题,你需要自己捕获错误:

set usage "- A simple script to demo cmdline parsing"
if {[catch {array set options [cmdline::getoptions ::argv $parameters $usage]}]} {
    puts [cmdline::usage $parameters $usage]
} else {
    parray options
}

样品运行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