如何在TCL中生成按键

问题描述 投票:0回答:1

我正在使用某种具有基于 TCL 的 shell 的工具。我在 Linux 环境中调用这个工具,它会打开一个 TCL shell,我可以在其中执行命令。

在此 TCL shell 中,当我键入一个或多个字母并按 Tab 时,它会显示以我已提供的字符串开头的可用命令列表。

现在我需要获取该工具可用的所有命令。 我正在寻找一种方法来自动发送字母,然后按 Tab 键并捕获,而不是手动给出字母表中的一个字母并按 Tab 键获取列表,然后将显示的命令列表复制到文件中将建议写入文件。

关于如何使用 CSH、Python 或 TCL 本身执行此操作,有什么建议吗? 还是根本不可能?

我尝试浏览一些在线资源并遇到名为“events”的命令,但不幸的是我的 TCL shell 无法识别它。

automation tcl
1个回答
0
投票

Tk 提供

event generate
,让您可以发出按键事件(尽管您还需要记住按键释放事件来配合它们)。它不会将这些传递给其他应用程序;可能有一个扩展可以做到这一点,但这是一个非常罕见的要求(仅用于 GUI 测试),并且可能是一个坏主意,因为通过事件注入驱动 GUI 应用程序非常脆弱。我猜这就是您提到的内容,我真的建议您不要尝试这样做。

驱动终端程序有更多选项。

最简单的情况中,您可以使用

open |theApplication r+
获取到应用程序的双向管道并对其进行读/写,但这“绝对是”最简单的情况。特别是,如果您这样做,您可能会遇到一些非常麻烦的缓冲;当程序不发送到终端时,完全缓冲其输出是很常见的(这是许多程序的默认行为)。 使用 Expect(即我推荐的)可能是最简单的,它是一个 Tcl 扩展,用于驱动任何复杂的终端应用程序。 Expect 已被移植到其他语言,尽管它通常只是原始 Tcl 扩展功能的子集;例如能够处理等待多个不同的可能输出之类的事情经常被忽略(因为实现起来相当复杂)。这里有很多问题,其答案展示了如何使用 Expect,并且手册页也提供了大量信息。

© www.soinside.com 2019 - 2024. All rights reserved.