【问题标题】:cmdline argument parsing using tcl?使用 tcl 解析命令行参数?
【发布时间】:2017-07-06 14:18:44
【问题描述】:

我正在尝试使用命令行参数将参数传递给 Spirent 测试中心工具,其中我正在传递插槽、端口、帧大小和负载。我想将插槽和端口存储在数组中,其中端口数是动态的。 我尝试了可以​​处理固定端口的 cmdline 的简单代码

package require cmdline

set parameters {
    {s.arg ""   "Slot"}
    {p.arg ""   "Port"}
    {l.arg "100"   "Load"}
    {f.arg "256"   "Framesize"}
    {debug      "Turn on debugging, default=off"}
}
#set option(l) 100
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
}
#puts [array get options]
puts $options(l)
puts $options(f)

脚本输出:

C:\Tcl\bin>tclsh opt.tcl -s 1 -f 128
options(debug) = 0
options(f)     = 128
options(l)     = 100
options(p)     =
options(s)     = 1
100
128

这里我想一次性通过每个插槽的所有端口,

tclsh opt.tcl -s 1 2 -p 11 12 13 14 -f 256 -l 100

其中插槽为 1 和 2,每个插槽中的端口为 11、12、13、14,需要创建插槽和端口数组。您能否建议一些方法来实现这一点。

【问题讨论】:

    标签: tcl cmdline-args


    【解决方案1】:

    试试

    tclsh opt.tcl -s "1 2" -p "11 12 13 14" -f 256 -l 100
    

    至少在 Windows 10 下它适用于我。问题是插槽和端口的列表必须各有一个值:引号确保这一点。

    【讨论】:

      【解决方案2】:

      我尝试了以下方法并进行了一些更正:

           set arglen [llength $argv]
           while {$index < $arglen} {
           set arg [lindex $argv $index]
           #puts $arg
           switch -exact -- $arg {
                -s {
              set args($arg) [lindex $argv [incr index]]
              set slot($y) $args($arg)
              incr y
                  }
              -p {
                 set args($arg) [lindex $argv [incr index]]
                  set port($z) $args($arg)
                  incr z
                  }
                 -l {
                       set args($arg) [lindex $argv [incr index]]
                      global Load
                      set Load $args($arg)
                      }
                  -f {
                      set args($arg) [lindex $argv [incr index]]
                      set frameLength $args($arg)
                      }   
      
                }
                  incr index
                }
      

      要运行的命令:

                 C:\Tcl\bin>tclsh l1.tcl -s 1 -p 11 -p 12 -l 10 -f 1
      

      【讨论】:

        猜你喜欢
        • 2021-11-05
        • 1970-01-01
        • 2013-09-13
        • 1970-01-01
        • 2015-09-20
        • 2013-03-21
        相关资源
        最近更新 更多