2017-03-17 1 views
3

Pexpect funktioniert einwandfrei, wenn ich in interaktiven Sitzungen arbeite, aber wenn es farbigen Text hat, passt es nicht nur zum Text, es passt auch zum Text zusammen mit ansi Farben. Die Regex dafür ist sehr kompliziert und groß. Kann mir jemand etwas vorschlagen, wie man damit arbeitet?So führen Sie das Pexpect-Skript für Terminal mit farbigem Text aus

Zum Beispiel:

statt nur auf der Suche nach:

"opendaylight-user @ root"

seine Suche:

„oder‚\ x1b [1mlogout \ x1b [0m 'zum Herunterfahren OpenDaylight. \ r \ r \ n \ r \ n \ x1b. \ r \ r \ n \
\ r \ n \ x1b [36mopendaylight-benutzer \ x1b [0m \ x1b [1m @ \ x1b [0m \ x1b [34mroot \ x1b [0m> ".

Dies ist nur ein Teil des Ausdrucks.

import pexpect 
import os 
def ex1(): 
     os.chdir("opendaylight/distribution-karaf-0.3.4-Lithium-SR4/bin/") 
     child=pexpect.spawn("./karaf clean",cwd="/home/ubuntu/opendaylight/distribution-karaf-0.3.4-Lithium-SR4/bin/") 
     child.expect("[email protected]>") 
     print child.before 
ex1() 

Fehler

Traceback (most recent call last): 
    File "ex07.py", line 11, in <module> 
    ex1() 
    File "ex07.py", line 9, in ex1 
    child.expect("[email protected]>") 
    File "/usr/local/lib/python2.7/dist-packages/pexpect/spawnbase.py", line 321, in expect 
    timeout, searchwindowsize, async) 
    File "/usr/local/lib/python2.7/dist-packages/pexpect/spawnbase.py", line 345, in expect_list 
    return exp.expect_loop(timeout) 
    File "/usr/local/lib/python2.7/dist-packages/pexpect/expect.py", line 107, in expect_loop 
    return self.timeout(e) 
    File "/usr/local/lib/python2.7/dist-packages/pexpect/expect.py", line 70, in timeout 
    raise TIMEOUT(msg) 
    pexpect.exceptions.TIMEOUT: Timeout exceeded. 
    <pexpect.pty_spawn.spawn object at 0x7f2c5ca8ae10> 
    command: ./karaf 
    args: ['./karaf', 'clean'] 
    buffer (last 100 chars): " or '\x1b[1mlogout\x1b[0m' to shutdown  OpenDaylight.\r\r\n\r\n\x1b[36mopendaylight-user\x1b[0m\x1b[[email protected]\x1b[0m\x1b[34mroot\x1b[0m>" 
    before (last 100 chars): " or '\x1b[1mlogout\x1b[0m' to shutdown OpenDaylight.\r\r\n\r\n\x1b[36mopendaylight- user\x1b[0m\x1b[[email protected]\x1b[0m\x1b[34mroot\x1b[0m>" 
    after: <class 'pexpect.exceptions.TIMEOUT'> 
    match: None 
    match_index: None 
    exitstatus: None 
    flag_eof: False 
    pid: 20699 
    child_fd: 5 
    closed: False 
    timeout: 30 
    delimiter: <class 'pexpect.exceptions.EOF'> 
    logfile: None 
    logfile_read: None 
    logfile_send: None 
    maxread: 2000 
    searchwindowsize: None 
    delaybeforesend: 0.05 
    delayafterclose: 0.1 
    delayafterterminate: 0.1 
    searcher: searcher_re: 
    0: re.compile("[email protected]>") 
+1

Ich habe geändert. Wenn es nicht genug plz ist, lassen Sie mich wissen, welche Art von Änderungen Sie erwarten – user7369931

+0

Suchen Sie nach Ignorieren [Escape-Codes] (https://en.wikipedia.org/wiki/ANSI_escape_code) –

Antwort

2

bekam ich die Antwort von expect_exact mit() und nicht erwarten(). expect() stimmt mit der Regex überein, aber expect_exact stimmt mit den Strings überein.

import pexpect 
    import os 
    def ex1(): 
     os.chdir("opendaylight/distribution-karaf-0.3.4-Lithium-SR4/bin/") 
     child=pexpect.spawn("./karaf clean",cwd="/home/ubuntu/opendaylight/distribution-karaf-0.3.4-Lithium-SR4/bin/") 
     child.expect_exact("\x1b[36mopendaylight-user\x1b[0m\x1b[[email protected]\x1b[0m\x1b[34mroot\x1b[0m>") 
     print child.before 
    ex1() 
Verwandte Themen