telnetlib read_until () funzione confusione
Domanda
Sto cercando di automatizzare alcune azioni Telnet con python3. Così ho iniziato a utilizzare la configurazione in telnetlib (non pexpect).
In realtà tutto funziona finora, ma non capisco completamente come read_until opere - in realtà la documentazione dice che è possibile impostare un timeout e se la stringa di ricerca non viene trovato il timeout restituisce un valore di byte vuoto o, o se v'è un altro valore di questo è quello che può essere memorizzato come un valore di ritorno!
Ha senso?!
Se voglio read_until un certo valore - come faccio a sapere che questo valore è stato davvero quello della funzione di lettura. Inoltre non sono riuscito a trovare il modo di controllare se il timeout è stato colpito.
La mia soluzione per ora è:
output = telnet.read_until(str.encode(hostname), 3)
if re.search(hostname, bytes.decode(output), re.IGNORECASE):
#do something when the output matches the searchstring
else:
#stop the function
, ma che non ha alcun senso per me, quindi forse ora una soluzione migliore
Soluzione
Sì, se il nome host è example.com
, read_until tornerà qualcosa come weijwrgnerg hgqwv blather example.com
. Tranne se non ha trovato il nome host dopo tre secondi, sarà solo sputare tutto ciò è ottenuto per allora:. weijwrgnerg hg
Quindi penso che si sta facendo quasi giusto. Probabilmente si desidera re.escape
vostro hostname, altrimenti lo interpreterà come una regex. In alternativa, si potrebbe utilizzare .endswith()
di Python. E si può fare output.decode()
per ottenere una stringa (piuttosto che bytes.decode(output)
).