2013-04-30 13 views
6

Non so cosa sta succedendo, ma non riesco a ottenere l'output completo dal comando remoto eseguito probabilmente perché si aspetta che il buffer interno venga eseguito.Come ottenere l'output completo previsto quando la dimensione del buffer interno di dimensione expect_out (buffer) supera?

proc SendCommands { Commands } { 
      global prompt log errlog 
        foreach element [split $Commands ";"] { 
            expect { 
              -re $prompt 
              {send -- "$element\r"} 
              } 
            set outcome "$expect_out(buffer)" 
          foreach line [split $outcome \n] { 
             foreach word [regexp -all -inline {\S+} $line] { 

              if {([string index [string trimleft $line " "] 0 ] == "%")} { 
               puts "$outcome" 
               exit 1 
              } 
             } 
          } 
        puts "$outcome" 
        } 

    } 

    set timeout 30 

    foreach host [ split $hosts "\;" ] { 
      spawn ssh -o "StrictHostKeyChecking no" "[email protected]$host" 
    match_max 10000000 

    expect { 
     timeout { send_user "\nFailed to get password prompt\n"; exit 1 } 
     eof { send_user "\nSSH failure for $host\n"; exit 1 } 
      "*?assword:*" 
      { 
      send -- "$password\r" 
      } 

    } 


    expect { 
       timeout { send_user "\nLogin incorrect\n"; exit 1 } 
       eof { send_user "\nSSH failure for $host\n"; exit 1 } 

     -re "$prompt" 
      { send -- "\r" } 
      } 
    set timeout 300 
    SendCommands "$Commands" 
    } 

questo è come mi sto eseguendo esso:

./sendcommand aehj SWEs-elmPCI-B-01.tellus comnet1 "terminal length 0;show int description" "(.*#)$" 

sto ottenendo l'output completo solo quando rimuovo log user 0 ma quando uso il put comando nella sendcommands fucnction sopra ottengo circa il 90 per cento di esso con il 10% dei dati finali alla fine non viene mostrato.

un modo che sto pensando è quello di utilizzare la negazione di regex in attesa ma non sembra funzionare.

        expect { 
              -re ! $prompt 
              {puts $expect_outcome(buffer)} 
              } 

EDIT: ho tutti l'uscita, una volta quando il suo eseguito circa 5 o 7 volte

risposta

1

Dopo un po 'di ricerca mi è venuta con questo e sembra funzionare, ma fatemi sapere di eventuali execptions o risposte migliori :

I set match_max = 1000 poi

expect { 
      -re $prompt 
      {send -- "$element\r"} 

    full_buffer { 
     append outcome $expect_out(buffer) 
     exp_continue 
    } 

            } 
append outcome $expect_out(buffer) 
puts $outcome 

ma ancora quando ho impostato match_max = 10000 o 100 di nuovo errore

Problemi correlati