Pytonorm

Hur man använder pexpect i Python

Hur man använder pexpect i Python

pexpect är en populär Python-modul för att göra olika typer av automatiserade uppgifter. Olika typer av interaktiva applikationer som telnet, ssh, ftp, etc., kan automatiseras med den här modulen. Det är en ren Python-modul, och det kräver inte en C-kompilator eller TCL eller Expect-tillägg som andra förväntar sig moduler. Det kan bara fungera med en Python-tolk.  Denna modul kan användas på två sätt. Ett sätt är att använda springa() funktion, och ett annat sätt är att använda ge upphov till klass. De springa() funktionen är enkel att använda än spawn-klassen och utför de automatiserade uppgifterna snabbt. Det specifika kommandot eller ett program kan köras av springa() funktion som returnerar utdata. Denna funktion kan användas som alternativ till os.systemet() fungera. De ge upphov till klass är kraftfullare än springa() funktion som kan skapa ett barnprogram, interagera med det genom att skicka inmatning och vänta på svaret. Den här modulen är installerad i python3 som standard. De två sätten att använda den här modulen har visats i denna handledning.

Med funktionen run ()

Syntax:

Syntaxen för springa() funktionen ges nedan.  Det har många argument för olika ändamål. Men de första 3 eller 4 argumenten används mest. Det första argumentet för denna funktion är obligatoriskt som tar kommandot som den här funktionen kommer att utföra. Det kan returnera flera utgångar. Om den withexitstatus argumentet används med Falsk värde returnerar det bara kommandot.

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

Exempel 1: Olika användningar av run () -funktionen

Tre olika användningsområden för springa() funktionen har visats i följande skript. 'pwdkommandos utdata körs i den första springa() funktion som visar den aktuella sökvägen till katalogen. Nästa, den springa() funktionen används för att bestämma detaljerna för en viss fil, och filnamnet kommer att tas från användaren. Den tredje springa() funktionen används för att göra ssh anslutning och hämta alla filer och mappar från webb mapp.

# Importera pexpect-modulen
importera pexpect
importera os
# Kör enkelt kommando
skriv ut ("Den aktuella arbetskatalogen: \ n% s"% pexpect.kör ('pwd').avkoda ("utf-8"))
# Hämta informationen för en viss fil
filnamn = input ("Ange ett befintligt filnamn:")
# Kontrollera att filen finns eller inte
om os.väg.existerar (filnamn):
output = pexpect.kör ("ls -l" + filnamn, medexitstatus = 0)
skriv ut ("Information för en viss fil: \ n% s"% output.avkoda ("utf-8"))
annan:
skriv ut ("Filen finns inte.")
# Hämta filerna och mappen för en viss katalog med ssh-kommandot
output = pexpect.run ("ssh [email protected] 'ls web /'", events = '(?i) lösenord ':' 12345 \ n ')
print ("\ nUtdata från ssh-kommando: \ n% s"% utdata.avkoda ("utf-8"))

Produktion

Följande utdata visas efter att ovanstående skript har körts. I utgången, doc1.py har gett som filnamn och detaljerna i den här filen har visats. Därefter listan över alla filer i webb mappen har visats med ssh förbindelse.

Använd spawn-klass

Syntaxen för spawn-klassen ges nedan. Konstruktören i denna klass kan ta många argument för många ändamål. Det första argumentet är obligatoriskt som tar kommandot för körning.

klass spawn __init __ (själv, kommando, args = [], timeout = 30, maxread = 2000, sökfönstrets storlek = ingen, loggfil = ingen, cwd = ingen, env = ingen)

Exempel 2: Enkel användning av spawn-klass

Den enkla användningen av spawn-klassen har visats i följande skript. 'datumkommandot har utförts här med hjälp av spawn-klassen. Utgången från kommandot kommer att hämtas genom att skapa objektet för spawn-klassen, och utskriften skrivs ut i läsbart format med hjälp av avkoda() metod.

# Importera pexpect-modulen
importera pexpect
# Kör datumkommandot med hjälp av spawn
barn = pexpect.spawn ('date')
# Läs barnets utdata utan att generera EOF
barn.förvänta dig (pexpect.EOF)
# Lagra texten som förväntas av strängmönstret
utgång = barn.innan
# Skriv ut utdata
skriv ut ("Idag är:", utdata.avkoda ("utf-8"))

Produktion

Följande utdata visas efter att ovanstående skript har körts.

Exempel 3: Läs innehållet i katalogen med hjälp av ssh-anslutning

Skapa ssh-anslutning och läsa listan över alla filer och mappar i en viss katalog visas i följande skript.  Här tas lösenordet för den definierade användaren från användaren för att skapa ssh-anslutning med spawn-klassen. Om det angivna lösenordet är felaktigt avslutas skriptet genom att ett felmeddelande visas.  Om det angivna lösenordet är korrekt men terminalen inte är definierad kommer skriptet att visa framgångsmeddelandet för anslutningen, skicka terminalen och definiera kommandotolken förväntade mönster. Om lösenordet är korrekt och terminalen är definierad, visar skriptet framgångsmeddelandet och kommandotolken för skalet.

# Importera pexpect-modulen
importera pexpect
# Ställ in användarnamnet för ssh-anslutning
användarnamn = '[email protected]'
# Ta ett giltigt lösenord från användaren
Lösenord = input ("Ange inloggningslösenordet för% s:"% användarnamn)
# Kör ssh-kommandot med hjälp av spawn
barn = pexpect.spawn ('ssh' + användarnamn)
# Vänta på lösenordet
barn.förvänta dig ('lösenord:')
# Skicka lösenordet från användaren
barn.sendline (lösenord)
# Förväntat tre utdata
jag = barn.förvänta dig (['Tillstånd nekad', 'Terminal typ', '[# \ $]'])
# jag blir 0 om ssh inte kan ansluta
om jag == 0:
print ("Tillstånd nekad av värd. Kan inte logga in")
barn.döda (0)
# i blir 1 om ssh kan ansluta men terminal inte är inställd
elif i == 1:
skriv ut ('Ansluten lyckades.\ nTerminal typ är inte inställd.')
barn.sendline ('vt100')
barn.förvänta dig ('[# \ $]')
# jag blir 2 om ssh kan ansluta och terminalen är inställd
elif i == 2:
skriv ut ('Ansluten lyckades.')
snabb = barn.efter
skriv ut ('Shell Command Prompt:', prompt.avkoda ("utf-8"))

Produktion

Följande utdata visas när ovanstående skript körs med fel lösenord.

Följande utdata visas när ovanstående skript körs med rätt lösenord.

Slutsats

pexpect är en mycket hjälpsam modul för Python-användare som hjälper dem att utföra sina vanliga uppgifter automatiskt. De mycket grundläggande användningarna av pexpect-modulen i Python har beskrivits i denna handledning genom att använda enkla exempel för att hjälpa användarna att börja arbeta med den här modulen.

Bästa spel att spela med handspårning
Oculus Quest introducerade nyligen den fantastiska idén om handspårning utan kontroller. Med ett ständigt ökande antal spel och aktiviteter som utför ...
Hur man visar OSD-överlägg i helskärms Linux-appar och -spel
Att spela helskärmsspel eller använda appar i distraktionsfritt helskärmsläge kan avskärma dig från relevant systeminformation som syns i en panel ell...
Topp 5 spelinspelningskort
Vi har alla sett och älskat streaming av spel på YouTube. PewDiePie, Jakesepticye och Markiplier är bara några av de bästa spelarna som har tjänat mil...