2017-03-17 10 views
3

インタラクティブセッションで実行するとPexpectはうまく動作しますが、色付きのテキストがテキストのみと一致しない場合、ansiの色とテキストが一致します。これのための正規表現は非常に複雑で大きなものです。誰かが私にどのようにこれで動作するかを提案することができます。例えばカラーテキストのターミナルでpexpectスクリプトを実行するには

"opendaylightユーザー@ルート" のが探して

代わりのがちょうど探し

「または「\ x1b [1mlogout \ x1b [0m 'をシャットダウンする OpenDaylight。\ r \ r \ n \ r \ n \ x1b。\ r \ r \ n
\ r \ n \ x1b [36mopendaylight-user \ x1b [0m \ x1b [1m @ \ x1b [0m \ x1b [34mroot \ x1b [0m> "。

これは式の一部です。

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

エラー

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

変更されました。十分なPLZがない場合は、あなたが期待する変更の種類を教えてください – user7369931

+0

[エスケープコード](https://en.wikipedia.org/wiki/ANSI_escape_code)を無視して検索してみてください。 –

答えて

2

私は(expect_exactを使用して、答えを得た)のではなく()期待しています。 expect()は正規表現と一致しますがexpect_exactは文字列と一致します。

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() 
関連する問題