问题标签 [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.
tcl - Expect/TCL telnet proc 不等待提示
我有一个 Expect proc,它发送 telnet 登录命令和发送命令。在 telnet proc 里面我做了一个 TFTP 。文件大小为 10MB。但是telent提示不会等到提示出现。它等待超时时间然后熄灭。
有什么方法可以等待 Expect 中的提示。
问候,米通
perl - 如何调试 Perl CGI 脚本?
我从正在删除的旧服务器继承了旧版 Perl 脚本。该脚本需要在新服务器上实现。我已经在新服务器上。
脚本非常简单;它通过 expect & ssh 连接到网络设备并收集数据。出于调试目的,我只使用从设备收集接口列表的部分。
新服务器上的脚本总是在重新加载后大约 5 秒内向我显示一个页面。很少,它包括来自远程设备的接口列表。最常见的是,它包含除接口列表之外的所有 HTML 元素。
现在,在旧服务器上,有时脚本需要 20 秒才能输出数据。那很好。
基于此,新服务器上的 apache 似乎在 Perl 脚本完成返回数据之前显示数据,尽管这肯定是不正确的。
附加信息: 很遗憾,我无法发布任何代码 - 工作政策。但是,我很确定这不是期望的问题。期望部分写为 expect() 或 die('error msg') ,我没有看到错误消息。但是,如果我将期望超时设置为 0,那么我确实会看到错误消息。
脚本中使用的期望超时值通常为 20 秒……但正如我上面提到的,apache 在大约 5 秒后显示来自脚本的静态内容,并且 95% 的时间不显示应该从期望检索的内容. 此外,脚本将预期内容写入驱动器上的文件 - 即使页面未显示它。
expect - 期望脚本的默认超时处理程序
当某些期望条件不满足时,我有一个期望脚本需要失败。例如:
如果期望脚本在一定时间内没有找到“Hello World”,它应该会失败。根据期望手册,我可以timeout
在期望中添加一个条件,但是我在脚本中有很多expect
语句,我不想为所有语句添加超时。有更好的方法吗?
embedded - 期待更换
我想使用在嵌入式平台上的串行端口上连接的调制解调器。
以下是我迄今为止拒绝的一些解决方案:
Expect加上一个终端程序:
我的(交叉)构建系统没有任何期望的打包规则,并且根据期望源的安装说明,配置脚本需要是交互式的,因为它会与调用它的终端进行一些测试在交叉编译时,Thid 看起来不像您想要做的事情。Python plus pyserial:我很想用这个,但整个东西的大小不适合我有限的闪存空间。
聊天(来自 pppd 包):嗯,我可以试一试,但它非常非常有限
所以我正在寻找某种轻量级、可嵌入的期望替代品。我对lua一无所知。它会是像 scipting 这样的期望的好人选吗?
ksh - 如何刷新期望脚本中的输入缓冲区?
我正在编写一个 Expect 脚本,但无法处理 shell 提示符(在 Linux 上)。我的 Expect 脚本生成rlogin
并且远程系统正在使用ksh
. 远程系统上的提示包含当前目录,后跟" > "
(空格大于空格)。脚本片段可能是:
这适用于简单的命令,但是当我发送的命令超过终端的宽度(或者更准确地说,ksh
认为是终端的宽度)时,事情就开始出错了。在这种情况下,ksh
交互式命令行会进行一些奇怪的水平滚动,这似乎会重写提示并在输出中添加一个额外的“ > ”。当执行命令后输出中出现多个提示时,这自然会导致 Expect 脚本混淆和不同步(我的脚本包含多个send
/expect
对)。
我已经尝试PS1
在远程系统上更改为更独特的内容,例如“prompt>”,但出现了类似的问题,这表明这不是解决此问题的正确方法。
我认为可能有帮助的是脚本能够告诉 Expect “我知道此时我已与远程系统正确同步,所以现在刷新输入缓冲区。” 该expect
语句具有即使模式匹配也不会-notransfer
丢弃输入缓冲区的标志,所以我认为我需要相反的情况。
是否有任何其他有用的技术可用于使远程 shell 的行为更具可预测性?我了解 Expect 进行了大量工作以确保生成的会话似乎与远程系统交互,但我宁愿ksh
关闭一些更烦人的交互功能(例如 的水平滚动) .
automation - (Tcl/Expect) 退出后清屏
从我的(半)交互式期望脚本退出后,我想清除屏幕(在本地机器上)。我可以从脚本中做到这一点吗?这是我尝试过的,但失败了。
在远程端,我不在 shell 中,而是在 ERP 程序中。如果这是必要的,我可以退出到 shell 然后在远程主机上执行“清除”,但我认为远程主机提示符仍然会出现在屏幕上。
编辑:更改为在“退出”之前尝试清除(子问题:在运行期望脚本的机器上执行“exec clear”对吗?)
scripting - Expect - 根据行和列从屏幕区域获取变量
我正在使用 Expect 与 SSH 会话和 ERP 程序进行自动交互。
与其依靠正则表达式来捕获我的期望脚本中的变量,是否有可能在接收到用户的某个击键后将屏幕区域(例如一个字段)捕获到代码中的变量中?向服务器发送一些其他命令并重新发送该字段?
假设订单号包含在 6、12、6、18(其中 6 是行,12-18 是列)包含我的 6 位订单号。我想从第 6 行第 12 到第 18 列中获取该订单号,并将其复制到一个变量中。然后允许用户进行更多交互(或期望移动到另一个菜单),然后在另一个菜单中重新发送订单号。
所以我想我的问题是:当前屏幕的内容是否在一个缓冲区中?(不是整个会话)您能否仅提取仅存在于屏幕上该行和列范围内的某个数据元素?
示例伪代码:
scripting - 我在哪里可以找到 Unix 的 TTY 和 curses 文档?
我正在为在 SCO Unix 上运行的 ERP 程序开发自动化工具。
请参阅我关于 Expect 的问题:
我在哪里可以找到(本地或网络)资源来了解会话中使用了哪些控制字符,更具体地说,在与 ERP 程序交互期间确定屏幕上的字段位置?
regex - 在 Expect 缓冲区中查找字符串的正则表达式
我正在尝试找到一个正则表达式,它可以匹配一串转义字符(期望响应,请参阅此问题)和六位数字(带有字母数字第一个字符)。
这是我需要识别的整个字符串:
最终我需要提取字符串:
这是我已经拥有的:
我需要识别转义字符以验证它是否是该屏幕区域中的一个字段。所以我需要一个包含第一部分的正则表达式,但是反斜杠让我感到困惑......
同样,一旦我在 $number 变量中有完整的字符串,如何在 Tcl 的另一个变量中隔离数字?
python - 使用 python 期望运行 openvpn
我需要一个 python 脚本来自动运行打开的 vpn,但我使用 sudo 来运行打开的 vpn
那是我的终端命令。我必须提供 sudo 的密码,我可以使用 pexpect 运行该命令吗?我必须得到退出代码,因为我想知道 openvpn 是否成功运行
谢谢