2016-02-03 11 views
5

Nel mio programma qui di seguito, l'uscita viene reindirizzato al file test1.txt, ma quando ho aperto il file, ho tre problemi qui:output standard rediretto su file mostra differenti da reale

  1. vedo i comandi come ls, pwd sono sotto il prompt (sw0: FID128: root>).
  2. il prompt dovrebbe mostrare "sw0: FID128: root>" ma mostra "sw0: FID128: root"
  3. se l'output effettivo ha 2 schede, il file mostra solo una scheda.

Fondamentalmente voglio confrontarlo con un altro file, quindi fallirà se il numero di schede è diverso.

telconn=pexpect.spawn('telnet 10.24.12.109') 
telconn.logfile = sys.stdout 
telconn.expect(":") 
telconn.send("user" + "\r") 
telconn.expect(":") 
telconn.send("pass" + "\r\r\r\r\n\n\n") 
telconn.expect("key to proceed.") 
telconn.send ("\003") 
telconn.expect("root>") 
prev_std= sys.stdout 
sys.stdout=open("test1.txt","w") 

print "Telnet connection is done" 

telconn.sendline('\n'); 
telconn.expect (['>',pexpect.EOF]) 
ls = telconn.before 

telconn.sendline('ls -al'); 
telconn.expect (['>',pexpect.EOF]) 
ls = telconn.before 

telconn.sendline('pwd'); 
telconn.expect (['>',pexpect.EOF]) 
pwd = telconn.before 

telconn.sendline('noscli'); 
telconn.expect (['#',pexpect.EOF]) 
nos = telconn.before 

telconn.sendline('terminal length 0'); 
telconn.expect (['#',pexpect.EOF]) 
term = telconn.before 

telconn.sendline('\n\n'); 

telconn .sendline('exit'); 
telconn.close() 

print ls 
print pwd 
print nos 
print term 

#print "Ended session" 


sys.stdout.close() 
sys.stdout =prev_std 

fo = open("test1.txt", "r+") 
str = fo.read(); 
print "Read String is : ", str 
# Close opend file 
fo.close() 

uscita Esempio simile a questo

Telnet connection is done 
^M 
sw0:FID128:root 
ls -al^M 
total 32^M 
pwddrwx------ 3 root root 4096 Feb 2 11:07 ./^M 
^M 
drwxr-xr-x 28 root root 4096 Feb 3 05:58 ../^M 
-rw-r--r-- 1 root sys 507 Feb 1 06:47 .bash_logout^M 
-rw-r--r-- 1 root sys 27 Feb 1 06:47 .inputrc^M 
-rw-r--r-- 1 root sys 1220 Feb 1 06:47 .profile^M 
-rw-r--r-- 1 root sys 2551 Feb 1 06:47 .rhosts^M 
drwxr-xr-x 2 root sys 4096 Feb 1 09:51 .ssh/^M 
-rw-r--r-- 1 root sys 617 Feb 1 06:47 .toprc^M 
-rw-r--r-- 1 root root 0 Feb 3 06:01 mcast_trc^M 
-rw-r--r-- 1 root root 0 Feb 3 06:01 sysdiag_trc^M 
sw0:FID128:root 
pwd^M 
/root^M 

risposta

0

vedo i comandi come ls, pwd sono al di sotto prompt

L'output è a capo incoerenti (^M è CR). Ciò significa che alcune parti del tuo insieme producono CR+LF, altre - solo LF. È difficile dire quale sia solo dalla singola uscita. Separali e vedi di persona.

il prompt dovrebbe mostrare "SW0: FID128: root>" ma mostra "SW0: FID128: radice"

I motivi possibili:

  1. non siete catturare fedelmente l'output. Per esempio. qualcosa viene stampato a stderr, anche.
    • uso 2>&1 o equivalente o altrimenti vedere entrambe le uscite qualche modo
  2. quando reindirizzato, l'uscita effettivamente diverso da quello che si vede sulla console. Alcuni programmi lo fanno, usando la funzione isatty() per distinguerli. La logica è tipicamente quella di adattarsi meglio all'output per la lettura di persone o macchine. Molti di questi programmi hanno interruttori per specificare esplicitamente l'aroma di output.
    • si può usare qualcosa di simile | cat (per l'uscita reindirizzamento) o cat <command_file> | (per il reindirizzamento input) per verificare se questo è il caso

Con telnet, può essere sia. > è un prompt dei comandi. In genere viene stampato su stderr. Può essere ancora stampato lì o non stampato affatto quando c'è il reindirizzamento.

se l'output effettivo ha 2 schede, il file mostra solo 1 scheda.

Probabilmente uguale a 2).Forse qualcosa che l'output attraversa fa anche la conversione delle tabulazioni.

+0

per il mio primo punto, ad esempio ls -al viene passato da sendline e totale di output 7736 drwx ------ 3 root root 4096 Feb 5 05:19 ./ drwxr-xr-x 28 root root 4096 5 febbraio 05:30 ../ -rw-r - r-- 1 root sys 507 1 febbraio 06:47 .bash_logout -rw-r - r-- 1 root sys 27 Feb 1 06:47 .inputrc -rw-r - r-- 1 root sys 1220 Feb 1 06:47 .profile -rw-r - r-- 1 root sys 2551 1 febbraio 06:47 .rhosts drwxr-xr-x 2 root sys 4096 Apr 22 2015 .ssh/ -rw-r - r-- 1 root sys 617 1 febbraio 06:47 .toprc – Suma

+0

@Suma Lo vedo già. Lone 'LF' è dopo il prompt. Quindi, esamina in dettaglio cosa succede a questo punto - da dove viene questo 'LF'. –

Problemi correlati