2017-02-02 1 views
0

Ich versuche, einen Neustart eines Systems Skript und ich habe mehrere GRUB-Einträge. Pexpect scheint die Menüpunkte nicht zu "sehen".Pexpect und GRUB - Warum zeigt mir Pexpect ein leeres GRUB-Menü?

ist hier ein Code-Schnipsel:

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() 

Um zu erklären, warum, wie mein Snippet ist es ist: Wenn „GNU GRUB“ auf dem Bildschirm ist, dann stoppt mein Timeout, das das Warten auf das System bedeutet Der Neustart ist beendet. An diesem Punkt vermute ich, dass GRUB die Box zeichnet und dann ausfüllt, also schlafe ich 3 Sekunden, um darauf zu warten, dass der Inhalt des GRUB-Menüs auf dem Bildschirm gezeichnet wird. Nachdem ich gewartet habe, wollte ich auf "Benutze die^und v Schlüssel" als meine Übereinstimmung passen, damit ich ein Vorher und Nachher bekommen kann. Diese

ist, was meine GRUB wie folgt aussieht:

    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. 

Anstatt die Menüpunkte zu sehen, ich bin nur der Umriss gezeichnet und den Text am unteren Rand zu sehen. Dies ist, was mein Code druckt auf den Bildschirm:

+--------------------------------------------------------------------------+  
|                   | 
|                   | 
|                   | 
|                   | 
|                   | 
+--------------------------------------------------------------------------+ 

Use the^and v keys 

Ich mag würde die Menüoptionen in einen Puffer bekommen („vor“, „Übereinstimmung“ oder „nach“), so dass ich Inventar zu nehmen. Irgendeine Idee, wie man die Menüpunkte ergreift?

Antwort

2

Ich vermute, dass GRUB zuerst die Use the^and v keys Nachrichten vor dem Drucken der Menüeinträge druckt. Versuchen Sie also so:

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 
+0

Ich hatte das gleiche Ding gedacht und schließlich herumgekommen, es zu prüfen. Ich habe genau das gemacht, was Sie vorgeschlagen haben und kann das gesamte Menü sehen. Danke für die Hilfe! – harperville