TCL 中解析参数的包

2023-12-01

有谁知道 tcl 可以轻松解析输入参数的标准包吗?或者准备好的程序? (我只有 3 个标志,但一般的标志更好)。


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

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,那么该标志期望后面有一个参数,例如在服务器.arg
  • The debug标志不以.arg,因此它不需要任何参数
  • The user defines the command-line parameters by a list of lists. Each sub-list contains 2 or 3 parts:
    • 标志(例如debug)
    • 默认值(例如 0),仅当参数带有参数时(标志以.arg).
    • 以及帮助消息
  • 调用使用/帮助-help or -?但是,输出并不漂亮,请参阅最后一个示例运行。

更新:帮助/使用

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

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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TCL 中解析参数的包 的相关文章

随机推荐

  • 执行 cx_Freeze 结果时的循环依赖

    我面临着一个非常简单的重现问题 但我根本不明白发生了什么 我尝试编译一个Python脚本 它使用fastparquet依赖关系 与 cx Freeze 当我直接启动它时 我能够执行我的脚本python script py 但是如果我用 cx
  • C# MySQL 连接过多

    我试着跑SELECT在桌子上MySql我收到此错误 Server Error in MyApp Application Too many connections Description An unhandled exception occu
  • 逐字突出显示表格中的文本,而不是整个范围

    我想为 html 表创建过滤器 例如网站 ctrl f 但当前代码突出显示搜索输入单个单词时的所有范围 无需任何插件 就像下图一样 Html表格过滤 search keyup function console log this val if
  • 如何使用 FFMpeg -timestamp 语法

    Hi All ffMpeg timstamp 选项是否像上图一样工作 07 21 54 07 07 05 黑盒容器中的白色文本 在 ubuntu 12 04 中 像这样输入执行 ffmpeg y f video4linux2 s vga r
  • 在 Excel 中每 X 行插入行

    我有一长串代码 例如 008 45 等 需要多行文本来解释它们 我有代码列表 我想知道如何自动插入一行 例如第五行 下面的例子 1 2 3 4 5 6 7 8 9 10 100 每五行我想插入给定数量的我选择的行 我怎样才能做到这一点 谢谢
  • 如何将 Java 8 LocalDateTime 与 JPA 和 Hibernate 结合使用

    我有以下类描述片段 Column name invalidate token date Temporal TemporalType TIMESTAMP private LocalDateTime invalidateTokenDate 此代
  • 使用 PHP 脚本运行 shell 命令

    我正在使用 CodeIgniter 创建应用程序 但无法使用 PHP 脚本运行 Linux 命令 如何运行终端命令 我试过了shell exec and exec 但是在使用 CI 时两者都不起作用 这取决于您的服务器配置 如果这些功能被禁
  • QMainWindow 在 show() 之后立即关闭

    我是 Qt 新手 主要使用 Objective C 所以我遇到了可能是新手问题 来自QDialog我尝试打开的窗口QMainWindow像这样 this gt close SQLWindow window window receivePat
  • 使用 python requests 模块在单个请求中上传多个文件

    蟒蛇请求模块提供了有关如何在单个请求中上传单个文件的良好文档 files file open report xls rb 我尝试使用此代码来扩展该示例 以尝试上传多个文件 files file open report xls rb open
  • 如何使用 CAPI 的 CryptImportKey 和来自 OpenSSL 的 PEM 编码公钥?

    如何获取 Microsoft 的 CryptoAPICryptImportKey函数导入一个PEM编码密钥 它确实有效 但是CryptDecrypt返回错误 1 Generate a Public Private RSA key pair
  • 使用 CSS 从中间展开 div,而不是仅从顶部和左侧展开

    我不确定这是否可行 但我认为使用 CSS 转换来创建 div 从其中心扩展到预定高度和宽度 而不仅仅是从左上角 的效果会很酷 例如 如果我有 demo div div 和 为简洁起见 省略了供应商前缀 square width 10px h
  • VS2015 尝试运行应用程序时出错:无效指针

    当您调试 Visual Studio 2015 解决方案时 您会看到以下错误消息 尝试运行应用程序时出错 指针无效 显然有些东西配置不正确 或者与权限相关 只是想知道是否有人已经找出原因 根据杰里米的建议 我查看了活动日志 有关活动日志的信
  • 将数据库从资产复制到数据库文件夹[重复]

    这个问题在这里已经有答案了 在主要活动中 我有一个方法可以从assets to the databases文件夹 try CHECK IS EXISTS OR NOT SQLiteDatabase dbe SQLiteDatabase op
  • 使用 ComboBox 将 DataGridView 绑定到 DataTable 不起作用

    我正在尝试创建一个绑定到 DataTable 的 DataGridView 其中一列是 ComboBox 代码运行 但在绑定后 不是在绑定数据时 出现以下错误 System ArgumentException DataGridViewCom
  • 如何在 OData C# 驱动程序中支持嵌套开放复杂类型?

    我在 NET Web Api 项目中使用以下 C OData 包 安装包 Microsoft AspNet OData安装包 Microsoft AspNet WebApi OData 当遵循微软的例子时在 OData v4 中使用开放类型
  • ASPX 中的动态页面呈现

    我对 C 和 NET 非常陌生 我发现自己面临着一个问题 并且不确定我需要朝哪个方向前进 我的公司与第三方订阅履行系统合作以实现许多功能 包括计费和续订 该系统能够在触发某些事件时自动发送电子邮件 例如 每个订阅都会经历我们所说的续订系列
  • 无法在钛中运行应用程序

    我是新手Titanium 我已经安装了Titanium on my windows基于笔记本电脑 还进口的Kitchen Sink在工作室中应用它 我已经设置了所有path变量也是最新的Android SDK 我还更改了运行配置日志等 但是
  • 查找数组的子键中存在的键?

    如何检查数组的子键中是否存在某个键 如果找到该项目的密钥 然后返回该项目 例如 我有这个数组 Array 0 gt Array a gt Array quantity request gt 1 time created gt 1339688
  • 将 MxN 二维数据点数组重新组织为 N 维数组

    我在二维数组中进行了一系列测量 例如 T mu1 mu2 mu3 a b c d e 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
  • TCL 中解析参数的包

    有谁知道 tcl 可以轻松解析输入参数的标准包吗 或者准备好的程序 我只有 3 个标志 但一般的标志更好 The 文档包括一个例子 这是一个简单的例子 package require cmdline set parameters serve