使用 tcl 解析命令行参数?
cmdline argument parsing using tcl?
我正在尝试使用命令行参数将参数传递给 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,需要创建插槽和端口数组。您能否提出一些实现此目的的方法。
尝试
tclsh opt.tcl -s "1 2" -p "11 12 13 14" -f 256 -l 100
至少在 Windows 10 岁以下对我有用。问题是插槽和端口列表需要各有一个值:引号确保这一点。
我尝试了以下方法并进行了一些更正:
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
我正在尝试使用命令行参数将参数传递给 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,需要创建插槽和端口数组。您能否提出一些实现此目的的方法。
尝试
tclsh opt.tcl -s "1 2" -p "11 12 13 14" -f 256 -l 100
至少在 Windows 10 岁以下对我有用。问题是插槽和端口列表需要各有一个值:引号确保这一点。
我尝试了以下方法并进行了一些更正:
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