Pexpect 和 GRUB - 为什么 Pexpect 向我显示一个空白的 GRUB 菜单?
Pexpect and GRUB - Why is Pexpect showing me a blank GRUB menu?
我正在尝试编写系统重启脚本并且我有几个 GRUB 条目。 Pexpect 似乎没有 "see" 菜单项。
这是一个代码片段:
def get_menu_selections(xtn):
print "Waiting for GNU GRUB to show"
xtn.expect_exact("GNU GRUB", timeout=480)
time.sleep(3)
xtn.expect_exact('Use the ^ and v keys')
print xtn.before
print xtn.after
def main():
connection = pexpect.spawn('ssh -l user -p2288 1.2.3.4')
# reboot box
get_menu_selections(connection)
main()
解释一下为什么我的代码片段是这样的:一旦 "GNU GRUB" 出现在屏幕上,我的超时就停止了,这意味着等待系统重启的时间已经结束。那时,我猜测 GRUB 绘制框,然后填充它,所以我睡了 3 秒等待 GRUB 菜单的内容绘制在屏幕上。在我等待之后,我打算在 "Use the ^ and v keys" 上进行匹配,这样我就可以得到前后对比。
这是我的 GRUB 的样子:
GNU GRUB version 1.98+20100804-14+squeeze1
+--------------------------------------------------------------------------+
|Base OS |
|Base OS -> ttyS0 |
|Base OS (recovery mode) |
|Base OS -> ttyS0 (recovery mode) |
|System Rescue |
|System Rescue -> ttyS0 |
| |
+--------------------------------------------------------------------------+
Use the ^ and v keys to select which entry is highlighted.
Press enter to boot the selected OS, 'e' to edit the commands
before booting or 'c' for a command-line.
The highlighted entry will be executed automatically in 0s.
我没有看到菜单项,而是只看到绘制的轮廓和底部的文本。这是我的代码打印到屏幕上的内容:
+--------------------------------------------------------------------------+
| |
| |
| |
| |
| |
+--------------------------------------------------------------------------+
Use the ^ and v keys
我想将菜单选项放入缓冲区("before"、"match" 或 "after"),以便我进行盘点。知道如何获取菜单项吗?
我怀疑 GRUB 在打印菜单条目之前首先打印 Use the ^ and v keys
消息。所以像这样尝试:
def get_menu_selections(xtn):
print "Waiting for GNU GRUB to show"
xtn.expect_exact("GNU GRUB", timeout=480)
time.sleep(3)
xtn.expect_exact('Use the ^ and v keys')
time.sleep(3)
xtn.expect_exact('System Rescue -> ttyS0')
print xtn.before
print xtn.after
我正在尝试编写系统重启脚本并且我有几个 GRUB 条目。 Pexpect 似乎没有 "see" 菜单项。
这是一个代码片段:
def get_menu_selections(xtn):
print "Waiting for GNU GRUB to show"
xtn.expect_exact("GNU GRUB", timeout=480)
time.sleep(3)
xtn.expect_exact('Use the ^ and v keys')
print xtn.before
print xtn.after
def main():
connection = pexpect.spawn('ssh -l user -p2288 1.2.3.4')
# reboot box
get_menu_selections(connection)
main()
解释一下为什么我的代码片段是这样的:一旦 "GNU GRUB" 出现在屏幕上,我的超时就停止了,这意味着等待系统重启的时间已经结束。那时,我猜测 GRUB 绘制框,然后填充它,所以我睡了 3 秒等待 GRUB 菜单的内容绘制在屏幕上。在我等待之后,我打算在 "Use the ^ and v keys" 上进行匹配,这样我就可以得到前后对比。
这是我的 GRUB 的样子:
GNU GRUB version 1.98+20100804-14+squeeze1
+--------------------------------------------------------------------------+
|Base OS |
|Base OS -> ttyS0 |
|Base OS (recovery mode) |
|Base OS -> ttyS0 (recovery mode) |
|System Rescue |
|System Rescue -> ttyS0 |
| |
+--------------------------------------------------------------------------+
Use the ^ and v keys to select which entry is highlighted.
Press enter to boot the selected OS, 'e' to edit the commands
before booting or 'c' for a command-line.
The highlighted entry will be executed automatically in 0s.
我没有看到菜单项,而是只看到绘制的轮廓和底部的文本。这是我的代码打印到屏幕上的内容:
+--------------------------------------------------------------------------+
| |
| |
| |
| |
| |
+--------------------------------------------------------------------------+
Use the ^ and v keys
我想将菜单选项放入缓冲区("before"、"match" 或 "after"),以便我进行盘点。知道如何获取菜单项吗?
我怀疑 GRUB 在打印菜单条目之前首先打印 Use the ^ and v keys
消息。所以像这样尝试:
def get_menu_selections(xtn):
print "Waiting for GNU GRUB to show"
xtn.expect_exact("GNU GRUB", timeout=480)
time.sleep(3)
xtn.expect_exact('Use the ^ and v keys')
time.sleep(3)
xtn.expect_exact('System Rescue -> ttyS0')
print xtn.before
print xtn.after