Domanda

Sto scrivendo una libreria di supporto telnet'ing a un server remoto e applicazioni in esecuzione.

Le cose stanno andando a gonfie nello stabilire una connessione, ottenere i dati indietro, analisi, ecc (almeno per quanto liscio come può essere per comunicare con i programmi tramite un'interfaccia di testo).

Un'applicazione cambierà il cursore se entra correttamente, o lasciare il cursore originale se non riesce (non scrivo le applicazioni, non mi resta che usarli.)

quando detta applicazione si avvia correttamente, questo funziona senza alcun problema:

promptB = "hello(x)# "   # Yes, the space at the end is intentional
response = tn_conn.cmd("app_name\n", prompt=promptB)

Vorrei utilizzare il cambiamento prompt (o la mancanza di cambiamento rapido) per rilevare se il programma non è stato avviato. Ho pensato che questa sarebbe un'occasione d'oro per provare telnetlib di aspettano (), dal momento che si aspettano () permette di passare una lista di stringhe per abbinare nella risposta.

Non posso, tuttavia, arrivare a questo lavoro:

promptA = "hello(x)# "   # Yes, the space at the end is intentional
promptB = "hello> "      # Yes, the space at the end is intentional

tn_conn.write("app_name\n")
which_prompt, mo, response = self.tn_conn.expect([promptA, promptB], timeout=3)

Il aspettano comando Sempre volte fuori, se le applicazioni inizia con successo o meno.

che = "-1"

mo = Nessuno

Risposta = "mumble mumble \ r \ r \ n altre cose \ r \ n \ r \ nhello #"

I documenti dicono che una stringa o un oggetto espressione regolare possono essere passate ad aspettarsi (Sto passando una stringa), quindi mi sto perdendo qualcosa? Uno sguardo alle mostre codice telnetlib che la sua re.search chiamando il numero (), non re.match (), in modo che non sembrerebbe essere il problema.

Qualcuno può offrire suggerimenti su quello che sto facendo male?

Modifica Aggiunta parentesi all'esempio pronta per meglio illustrare il motivo per cui si aspettano () non funzionava come previsto.

È stato utile?

Soluzione 3

In precedenti tentativi, che avevo perseguito l'opzione regex mettendo .* a entrambe le estremità della mia stringa di ricerca, così come fare un re.compile() alla stringa di ricerca prima di passarlo / loro di .expect(); tutto senza fortuna.

Grazie al suggerimento di jathanism, ho riesaminati utilizzando regex, questa volta con il pensiero che expect() era, ehm ... in attesa 'regex' in cui stavo pensando 'stringa'.

Certo, basta, ci sono stati personaggi del mio prompt di stringa che si aspettano stava trattando come simboli regex - () di per l'esattezza. Escaping the parentesi lasciate expect() fare il suo lavoro.

Altri suggerimenti

Non ti dimenticare se si utilizza l'espressione regolare in Python si può sempre utilizzare il metodo grezzo (r'my string') piuttosto che aggiungere in tutte le fughe; rende più leggibile.

Ho qualcosa da lavoro. Cerchi # o% o $ prompt. Per quanto riguarda le vostre richieste, assicurarsi che i caratteri speciali sono scappati. (). Forse fuggire everthing solo per essere sicuri.

idx, obj, response = tn_conn.expect("\#","\%","\$",3)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top