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

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top