问题标签 [expect]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
bash - 如何通过 TCP 匹配模式?
我正在尝试编写监控脚本。它应该连接到我服务器上的某个端口,读取输出,如果输出是预期值,则打印 1,否则打印 0。
我正在研究一个涉及 的解决方案cat < /dev/tcp/hostname/port
,但该解决方案让我望而却步。也许涉及期望的事情?我更喜欢 bash 脚本解决方案。帮助表示赞赏!
tcl - 如何在 Expect 中保存和解析命令输出?
我在 Linux 服务器上编写了一个 Expect 脚本,该脚本应该远程登录到路由器以收集一些系统信息。到目前为止,我的脚本可以成功建立连接、运行路由器命令、断开连接并终止。
该命令显示了几行我需要解析的内容,我不确定如何在 Expect 中执行。如何保存输出,grep 一行,然后从行中提取一列,最后将结果保存在文件中?如果可能的话,我想完全使用 Expect 而不是变通方法(例如 Expect 嵌入在 Bash 中)。
谢谢你的时间。jk04
testing - 用于二进制协议测试的类 Expect 工具
我想使用诸如Expect之类的东西为简单的面向字节的协议编写测试。测试脚本看起来像一个简单的流:
(将写入发送到标准输出并期望从标准输入读取足够多的内容,如果不匹配则退出。)
我不能使用 expect 本身,因为它是为缓冲的、面向行的交互而设计的。出于同样的原因,使用 grep 或 awk 进行模式匹配已失效。
有我可以使用的 UNIX 工具或库吗?如果它是标准的和可移植的,那就更好了,因为它需要与现有程序集成。
expect - ncurses - 期望:睡眠在错误的时间执行
我有一些需要自动化以重复测试的 ncurses 应用程序。我将“sleep”命令放在“send”命令之间。但是,我看到的是所有睡眠都是在屏幕加载之前开始执行的。期望连接发送(我在睡眠期间在屏幕底部看到)然后将它们一起发出。
我尝试使用“send -s”或“send -h”发送所有密钥。这有点帮助。我已将第 1 行的“-f”替换为“-b”——又是一个微小的差异。
为什么“睡眠”没有在正确的时间暂停。顺便说一句,我的程序有一个 getc() 循环,所以我不能使用“expect”命令。我也试过了。
networking - cygwin 的期望不适用于网络使用?
我需要在 cygwin 上自动执行“net use”命令。
命令是'net use /user:"name" \somewhere'。并且'输入'name'的密码以连接到'prosseek':'应输入密码。
它适用于命令行输入,以及在批处理文件中运行时。当我按如下方式制作期望脚本时它不起作用。
p>我收到如下错误消息。
p>- 问:可能有什么问题?
- 问:某些 MS 命令可以与 cygwin/expect 一起使用,例如“net use”吗?
shell - 当界面要求输入密码时,如何使用 shell 脚本提供密码
我有一个脚本(dobrt),它在执行时要求输入密码。我如何编写一个执行dobrt并自动提供它要求的密码的脚本。
当我执行时 ./dobrt -p file.txt
,系统要求输入密码。我希望脚本自动发送密码。这是输出
我为此尝试使用 shell 和 expecxt 脚本。这就是我所做的。
我有 2 个脚本。我从第一个脚本(run_dobrt.sh)调用第二个脚本(run_dobrt.exp)。
脚本 1:run_dobrt.sh
脚本 2:run_dobrt.exp
现在当我运行 run_dobrt.sh 我得到以下错误 run_dobrt.sh[20]: spawn: not found 如何摆脱这个错误并完成这个任务?请帮忙。
java - 使用 GDB 编写测试 - 如何捕获输出?
我正在尝试编写与 GDB 交互但无法捕获输出的测试。我希望生成一个日志文件,如果手动执行测试,它看起来就像在终端中看到的那样。然而,在捕获其输出时,GDB 被证明是非常顽固的。
我已经能够编写能够与 GDB 交互并且其输出可以重定向到日志文件的 Expect 脚本,但我不想在 TCL 中编写我的测试。我希望使用与 Java 兼容的 Groovy。由于 Perl 的 Expect 和 ExpectJ 的某些原因,程序输出总是到终端并且不能被重定向到文件。
我尝试使用 ProcessBuilder 从 Java 启动 GDB 进程,它大部分都可以工作,但打印语句的输出永远不会出现在标准输出上,也无法被捕获。我想如果 Expect 有效,那么我会从 Java 启动 expect 并让它与 GDB 交互,但在这种情况下,大部分程序输出都会丢失,永远不会出现在创建进程的标准输出中。
所以我的问题是,如何在 Groovy 中编写一个测试(Java 也可以),它与 GDB 交互并可以捕获所有输出?
伪代码:
日志文件:
bash - bash命令在进程中重复模拟按键
nmap工具有这样一个功能 -当 您执行扫描 [#nmap -A -T4 localhost] 并按“Enter”时 - 它会显示一种状态信息“Timing: About 6.17% done”
问题 - 如何在不触摸 bourne shell 中的键盘的情况下强制此按键重复发生?
ps:只是想为php的proc_open函数中的一个bug找到一个解决方法,当一个进程的stdout只有在关闭stdout管道后才返回,而php的pty仿真在fbsd上不起作用。
问题关闭。使用“expect”实用程序解决的问题
ftp - 工作多年的 Expect 脚本在新的 Expect 版本中表现异常
我最近从 FreeBSD 4.x 服务器迁移到 FreeBSD 8.0 服务器。我现在正在使用 expect-5.43.0_3。不记得旧版本的expect是什么,也无法快速查看,因为旧系统上的硬盘在完成迁移后几分钟内就崩溃了!(哇!)
无论如何,我有一个期望脚本,它创建一个压缩的 tar 文件并每晚通过 FTP 传输它。该脚本已成功运行了 YEARS。突然,自从迁移/升级以来,它就无法正常工作,我盯着它看了好几天,却无法修复它。我想确保每个 FTP 命令都已成功完成,然后再继续执行下一个命令,因为接下来的步骤包括删除远程服务器上选定的旧版本文件,如果传输是,我不想执行删除操作不能正常工作。
所以 - 这部分脚本仍然有效:
...
...这是与上述执行相对应的对话流:
(注意 - 哈希标记允许我使用低超时值并快速检测脚本是否挂起)
到目前为止,一切都很好!在过去的 6 年里,一切仍然正常工作,但下一行失败并显示“ftp unexpected prompt 2”,即使它正在寻找的字符串“\n226”在对话流中很明显
请注意,非常清楚的是,在“ftp>”之前的对话流中有一个“\n226”,但我一直得到“ftp unexpected prompt 2”。我尝试将其更改为“转移”或“完成”,但它仍然具有相同的效果。现在,我在没有检查是否成功完成的情况下运行脚本,但很明显,我对此并不满意,这是一个等待发生的意外,因为以下步骤删除了选定的旧文件,我不想这样做如果这些文件没有成功传输,我目前没有哪个测试。
我认为输入流缓冲/处理发生了一些变化,我需要改变它,以便它在“看到”“ftp>”字符串之前“看到”“\n226”或“传输”或“完成” , 但为什么?而且,就此而言,如何?:)
tcl - 如何自动化测试基于文本的菜单
我有一个在远程 Linux 主机上运行的基于文本的菜单。我正在使用期望 ssh 进入该主机,并想弄清楚如何与菜单交互。交互包括向上、向下箭头以及使用回车键和回车键。例如,
当您进入系统时,断开连接被突出显示。因此,只需按两次 enter 即可断开与系统的连接。第二次进入确认断开连接。
以下代码将 ssh 进入我的系统并调出菜单。如果我删除期望 eof 并尝试发送“\r”,认为这会选择“断开连接”菜单选项,我会收到以下错误:“write() 无法写入任何内容 - 将 sleep(1) 并重试...”
我查看了 virterm 和 term_expect 示例,但无法弄清楚如何调整它们以适合我。如果有人能指出我正确的方向,我将不胜感激。我需要知道的是我可以与基于文本的菜单系统进行交互吗?这样做的正确方法是什么,如果有的话,例子会很棒。
谢谢,-里根