Python

Hvordan bruke pexpect i Python

Hvordan bruke pexpect i Python

pexpect er en populær Python-modul for å utføre forskjellige typer automatiserte oppgaver. Ulike typer interaktive applikasjoner som telnet, ssh, ftp, etc., kan automatiseres ved hjelp av denne modulen. Det er en ren Python-modul, og den krever ikke en C-kompilator eller TCL eller Expect-utvidelser som andre forventer moduler. Det kan bare fungere ved å bruke en Python-tolk.  Denne modulen kan brukes på to måter. En måte er å bruke løpe() funksjon, og en annen måte er å bruke gyte klasse. De løpe() funksjonen er enkel å bruke enn gyteklassen og utfører automatiserte oppgaver raskt. Den bestemte kommandoen eller et program kan utføres av løpe() funksjon som returnerer utdataene. Denne funksjonen kan brukes som alternativ til os.system() funksjon. De gyte klassen er kraftigere enn løpe() funksjon som kan gyte et barneprogram, samhandle med det ved å sende innspill og vente på svaret. Denne modulen er installert i python3 som standard. De to måtene å bruke denne modulen har vist i denne opplæringen.

Bruker funksjonen run ()

Syntaks:

Syntaksen til løpe() funksjonen er gitt nedenfor.  Det har mange argumenter for forskjellige formål. Men de første 3 eller 4 argumentene brukes mest. Det første argumentet for denne funksjonen er obligatorisk som tar kommandoen som denne funksjonen skal utføre. Den kan returnere flere utganger. Hvis den withexitstatus argument brukes med Falsk verdi, vil den bare returnere kommandoens utdata.

run (command, timeout = 30, withexitstatus = False, events = None, extra_args = None, logfile = None, cwd = None, env = None, ** kwargs)

Eksempel 1: Ulike bruksområder for funksjonen run ()

Tre forskjellige bruksområder for løpe() funksjonen er vist i følgende skript. The 'pwdkommandos utgang kjøres i den første løpe() funksjon som viser gjeldende arbeidskatalogbane. Neste, den løpe() funksjonen brukes til å bestemme detaljene for en bestemt fil, og filnavnet blir hentet fra brukeren. Den tredje løpe() funksjonen brukes til å lage ssh tilkobling og hente alle filer og mapper fra nett mappe.

# Importer pexpect-modulen
importer pexpect
importer os
# Kjør enkel kommando
print ("Den gjeldende arbeidskatalogen: \ n% s"% pexpect.kjør ('pwd').dekode ("utf-8"))
# Hent informasjonen til en bestemt fil
filnavn = input ("Skriv inn et eksisterende filnavn:")
# Kontroller at filen eksisterer eller ikke
hvis os.sti.eksisterer (filnavn):
output = pexpect.kjør ("ls -l" + filnavn, withexitstatus = 0)
print ("Informasjon om en bestemt fil: \ n% s"% output.dekode ("utf-8"))
ellers:
print ("Filen eksisterer ikke.")
# Hent filene og mappen til en bestemt katalog ved hjelp av ssh-kommandoen
output = pexpect.kjør ("ssh [email protected] 'ls web /'", events = '(?i) passord ':' 12345 \ n ')
print ("\ nUtgangen til ssh-kommandoen: \ n% s"% utdata.dekode ("utf-8"))

Produksjon

Følgende utdata vises etter å ha utført skriptet ovenfor. I utgangen, doc1.py har gitt som filnavn, og detaljene i denne filen har vist. Deretter listen over alle filene til nett mappen har vist ved hjelp av ssh forbindelse.

Bruker spawn-klasse

Syntaksen til gyteklassen er gitt nedenfor. Konstruktøren av denne klassen kan ta mange argumenter for mange formål. Det første argumentet er obligatorisk som tar kommandoen for utførelse.

klasse gyter __init __ (selv, kommando, args = [], timeout = 30, maxread = 2000, søkevindu størrelse = ingen, loggfil = ingen, cwd = ingen, env = ingen)

Eksempel 2: Enkel bruk av gyteklasse

Den enkle bruken av gyteklassen har vist seg i følgende skript. The 'Datokommandoen har blitt utført her ved hjelp av spawn-klassen. Utdataene fra kommandoen vil bli hentet ved å opprette objektet til gyteklassen, og utskriften skrives ut i menneskelig lesbart format ved å bruke dekode() metode.

# Importer pexpect-modulen
importer pexpect
# Kjør dato-kommandoen ved hjelp av spawn
barn = pexpect.gyte ('date')
# Les barneproduksjonen uten å generere EOF
barn.forvent (pexpect.EOF)
# Lagre teksten som forventes av strengmønsteret
utgang = barn.før
# Skriv ut utdata
utskrift ("Today is:", output.dekode ("utf-8"))

Produksjon

Følgende utdata vises etter å ha utført skriptet ovenfor.

Eksempel 3: Les innholdet i katalogen ved hjelp av ssh-tilkobling

Opprette ssh-tilkobling og lese listen over alle filer og mapper i en bestemt katalog er vist i følgende skript.  Her vil passordet til den definerte brukeren bli tatt fra brukeren for å opprette ssh-forbindelse ved hjelp av spawn-klassen. Hvis det gitte passordet er feil, vil skriptet avsluttes ved å vise en feilmelding.  Hvis det gitte passordet er riktig, men terminalen ikke er definert, vil skriptet vise suksessmeldingen for forbindelsen, sende terminaltypen og definere ledetekstens forventede mønster. Hvis passordet er riktig og terminalen er definert, vil skriptet vise suksessmeldingen og shell-ledeteksten.

# Importer pexpect-modulen
importer pexpect
# Sett brukernavnet for ssh-tilkobling
brukernavn = '[e-postbeskyttet]'
# Ta et gyldig passord fra brukeren
Passord = input ("Skriv inn påloggingspassordet til% s:"% brukernavn)
# Kjør ssh-kommandoen ved hjelp av spawn
barn = pexpect.spawn ('ssh' + brukernavn)
# Vent på passordet
barn.forvent ('passord:')
# Send passordet hentet fra brukeren
barn.sendline (passord)
# Forventet tre utganger
jeg = barn.forvent (['Tillatelse nektet', 'Terminal type', '[# \ $]'])
# jeg vil være 0 hvis ssh ikke kan koble til
hvis jeg == 0:
print ("Tillatelse nektet av verten. Klarte ikke å logge inn")
barn.drepe (0)
# jeg vil være 1 hvis ssh er i stand til å koble til, men terminal ikke er satt
elif i == 1:
skriv ut ('Tilkoblet vellykket.\ nTerminal type er ikke angitt.')
barn.sendline ('vt100')
barn.forvent ('[# \ $]')
# jeg vil være 2 hvis ssh er i stand til å koble til og terminal er satt
elif i == 2:
skriv ut ('Tilkoblet vellykket.')
spør = barn.etter
skriv ut ('Shell Command Prompt:', prompt.dekode ("utf-8"))

Produksjon

Følgende utdata vises når skriptet ovenfor kjøres med feil passord.

Følgende utdata vises når skriptet ovenfor kjøres med riktig passord.

Konklusjon

pexpect er en veldig nyttig modul for Python-brukere som hjelper dem med å gjøre sine vanlige oppgaver automatisk. De helt grunnleggende bruken av pexpect-modulen til Python er beskrevet i denne veiledningen ved å bruke enkle eksempler for å hjelpe brukerne til å begynne å jobbe med denne modulen.

Beste kommandolinjespill for Linux
Kommandolinjen er ikke bare din største allierte når du bruker Linux, den kan også være kilden til underholdning fordi du kan bruke den til å spille m...
Beste Gamepad Mapping Apps for Linux
Hvis du liker å spille spill på Linux med en gamepad i stedet for et vanlig tastatur- og musinngangssystem, er det noen nyttige apper for deg. Mange P...
Nyttige verktøy for Linux-spillere
Hvis du liker å spille spill på Linux, er sjansen stor for at du har brukt apper og verktøy som Wine, Lutris og OBS Studio for å forbedre spilloppleve...