Pexpect 和 GRUB - 为什么 Pexpect 显示一个空白的 GRUB 菜单



我正在尝试编写重新启动系统的脚本,并且我有几个 GRUB 条目。 Pexpect似乎没有"看到"菜单项。

下面是一个代码片段:

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 菜单的内容在屏幕上绘制。 在我等待之后,我将在"使用 ^ 和 v 键"作为我的匹配上匹配,这样我就可以得到之前和之后。

这是我的 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

我想将菜单选项放入缓冲区("之前"、"匹配"或"之后"),以便我可以盘点。 知道如何抓取菜单项吗?

我怀疑 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

相关内容

  • 没有找到相关文章

最新更新