Come usare Pexpect in Python

Come usare Pexpect in Python

pexpect è un popolare modulo Python per svolgere diversi tipi di attività automatizzate. Diversi tipi di applicazioni interattive come Telnet, SSH, FTP, ecc., può essere automatizzato utilizzando questo modulo. È un modulo Python puro e non richiede un compilatore C o TCL o si aspettano estensioni come altri si aspettano moduli. Può funzionare facilmente usando un interprete di Python. Questo modulo può essere utilizzato in due modi. Un modo è usare il correre() funzione e un altro modo è usare produrre classe. IL correre() La funzione è facile da usare rispetto alla classe Spawn ed esegue rapidamente le attività automatizzate. Il comando particolare o un programma può essere eseguito da correre() funzione che restituisce l'output. Questa funzione può essere utilizzata come alternativa al sistema operativo.sistema() funzione. IL produrre La classe è più potente del correre() funzione che può generare un programma per bambini, interagire con esso inviando input e in attesa della risposta. Questo modulo è installato in Python3 per impostazione predefinita. I due modi di usare questo modulo hanno mostrato in questo tutorial.

Utilizzo della funzione run ()

Sintassi:

La sintassi del correre() La funzione è riportata di seguito. Ha molti argomenti per vari scopi. Ma i primi 3 o 4 argomenti sono usati principalmente. Il primo argomento di questa funzione è obbligatorio che prende il comando che questa funzione eseguirà. Può restituire più output. Se la WithexitStatus L'argomento è usato con il Falso valore, restituirà solo l'output del comando.

Esegui (comando, timeout = 30, withexitstatus = false, events = nessuno, extra_args = nessuno, logfile = nessuno, cwd = none, env = nessuno, ** kwargs)

Esempio-1: diversi usi della funzione run ()

Tre diversi usi del correre() la funzione ha mostrato nel seguente script. IL 'PWD'L'output del comando viene eseguito nel primo correre() funzione che visualizzerà l'attuale percorso della directory di lavoro. Successivamente, il correre() La funzione viene utilizzata per determinare i dettagli di un determinato file e il nome file verrà prelevato dall'utente. Il terzo correre() La funzione viene utilizzata per creare il ssh connettere e recuperare tutti i file e le cartelle da ragnatela cartella.

# Importa modulo pexpect
Importa pexpect
Import OS
# Esegui il comando semplice
Stampa ("La directory di lavoro attuale: \ n %s" %pexpect.run ('pwd').decode ("UTF-8"))
# Recupera le informazioni di un determinato file
FileName = input ("Immettere un nome file esistente:")
# Controllare che il file esista o no
Se OS.sentiero.esiste (nome file):
output = pexpect.run ("ls -l"+nome file, witExitStatus = 0)
Stampa ("Informazioni di un particolare file: \ n %s" %output.decode ("UTF-8"))
altro:
Stampa ("Il file non esiste.")
# Recupera i file e la cartella di una particolare directory usando il comando SSH
output = pexpect.run ("ssh fahmida@localhost 'ls web/'", events = '(?i) password ':' 12345 \ n ')
Stampa ("\ nthe output del comando ssh: \ n %s" %output.decode ("UTF-8"))

Produzione

Verrà visualizzato il seguente output dopo aver eseguito lo script sopra. Nell'output, Doc1.Py ha dato come nome file e i dettagli di questo file hanno mostrato. Successivamente, l'elenco di tutti i file del ragnatela la cartella ha mostrato l'uso ssh connessione.

Usando la classe di spawn

La sintassi della classe di spawn è riportata di seguito. Il costruttore di questa classe può prendere molti argomenti per molti scopi. Il primo argomento è obbligatorio che prenderà il comando per l'esecuzione.

Class Spawn __init __ (self, comando, args = [], timeout = 30, maxread = 2000, finestra di ricerca size = nessuno, logfile = nessuno, cwd = nessuno, env = nessuno)

Esempio-2: semplice uso della classe di spawn

Il semplice uso della classe di spawn ha mostrato nel seguente script. IL 'data'Il comando è stato eseguito qui usando la classe spawn. L'output del comando verrà recuperato creando l'oggetto della classe di spawn e l'uscita viene stampata in formato leggibile dall'uomo usando il decodificare() metodo.

# Importa modulo pexpect
Importa pexpect
# Esegui il comando Data usando Spawn
bambino = pexpect.spawn ('data')
# Leggi l'output del bambino senza generare EOF
bambino.Aspettatevi (pexpect.EOF)
# Memorizza il testo previsto dal modello di stringa
output = figlio.Prima
# Stampa l'output
Stampa ("Oggi è:", output.decode ("UTF-8"))

Produzione

Verrà visualizzato il seguente output dopo aver eseguito lo script sopra.

Esempio-3: leggi il contenuto della directory utilizzando la connessione SSH

Creazione della connessione SSH e leggere l'elenco di tutti i file e le cartelle di una particolare directory ha mostrato nel seguente script. Qui, la password dell'utente definito verrà presa dall'utente per effettuare la connessione SSH utilizzando la classe Spawn. Se la password data non è corretta, lo script verrà terminato mostrando un messaggio di errore. Se la password data è corretta, ma il terminale non è definito, lo script mostrerà il messaggio di successo per la connessione, inviare il tipo di terminale e definire il modello previsto del prompt dei comandi. Se la password è corretta e il terminale è definito, lo script mostrerà il messaggio di successo e il prompt dei comandi Shell.

# Importa modulo pexpect
Importa pexpect
# Imposta il nome utente per la connessione SSH
nome utente = 'fahmida@localhost'
# Prendi una password valida dall'utente
Password = input ("Immettere la password di accesso di %s:" %nome utente)
# Esegui il comando ssh usando spawn
bambino = pexpect.spawn ('ssh' + nome utente)
# Attendi la password
bambino.Aspettatevi ('Password:')
# Invia la password presa dall'utente
bambino.Sendline (password)
# Tre output previsto
I = bambino.Aspettate (['autorizzazione negata', 'Tci terminale', '[#\ $]'])
# Sarò 0 se SSH non è in grado di connettersi
Se i == 0:
Stampa ("Autorizzazione negata dall'host. Impossibile fare il log in")
bambino.uccidere (0)
# Sarò 1 se SSH è in grado di connettersi ma il terminale non è impostato
elif i == 1:
Stampa ("collegato correttamente.\ nterminal type non è impostato.')
bambino.SendLine ('VT100')
bambino.Aspettate ('[#\ $]')
# Sarò 2 se SSH è in grado di connettersi e il terminale è impostato
elif i == 2:
Stampa ("collegato correttamente.')
prompt = bambino.Dopo
Stampa ('Prompt comandi Shell:', prompt.decode ("UTF-8"))

Produzione

Verrà visualizzato il seguente output quando lo script sopra viene eseguito con la password errata.

Verrà visualizzato il seguente output quando lo script sopra viene eseguita con la password corretta.

Conclusione

Pexpect è un modulo molto utile per gli utenti di Python che li aiuta a svolgere automaticamente le loro attività regolari. Gli usi molto basilari del modulo pexpect di Python sono stati descritti in questo tutorial utilizzando semplici esempi per aiutare gli utenti a iniziare a lavorare con questo modulo.