Python

Hoe pexpect te gebruiken in Python

Hoe pexpect te gebruiken in Python

vooruitzicht is een populaire Python-module voor het uitvoeren van verschillende soorten geautomatiseerde taken. Verschillende soorten interactieve toepassingen zoals telnet, ssh, ftp, enz., kan worden geautomatiseerd met behulp van deze module. Het is een pure Python-module en er is geen C-compiler of TCL voor nodig of extensies verwachten zoals anderen modules verwachten. Het kan gemakkelijk werken door alleen een Python-interpreter te gebruiken.  Deze module kan op twee manieren worden gebruikt. Een manier is om de rennen() functie, en een andere manier is om paaien klasse. De rennen() functie is gebruiksvriendelijker dan de spawn-klasse en voert de geautomatiseerde taken snel uit. De specifieke opdracht of een programma kan worden uitgevoerd door de rennen() functie die de output retourneert. Deze functie kan worden gebruikt als alternatief voor de os.systeem() functie. De paaien klasse is krachtiger dan de rennen() functie die een kindprogramma kan spawnen, ermee kan communiceren door invoer te verzenden en te wachten op het antwoord. Deze module is standaard in python3 geïnstalleerd. De twee manieren om deze module te gebruiken zijn in deze tutorial getoond.

Functie run() gebruiken

Syntaxis:

De syntaxis van de rennen() functie wordt hieronder gegeven:.  Het heeft veel argumenten voor verschillende doeleinden. Maar de eerste 3 of 4 argumenten worden meestal gebruikt. Het eerste argument van deze functie is verplicht dat het commando aanneemt dat deze functie zal uitvoeren. Het kan meerdere uitgangen retourneren. Als de met exitstatus argument wordt gebruikt met de niet waar waarde, het zal alleen de uitvoer van de opdracht retourneren.

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

Voorbeeld-1: Verschillende toepassingen van de functie run()

Drie verschillende toepassingen van de rennen() functie zijn weergegeven in het volgende script:. De 'pwd' de uitvoer van het commando wordt uitgevoerd in de eerste rennen() functie die het huidige werkmappad toont. Volgende, de rennen() functie wordt gebruikt om de details van een bepaald bestand te bepalen, en de bestandsnaam wordt overgenomen van de gebruiker. De derde rennen() functie wordt gebruikt om de ssh verbinding maken en alle bestanden en mappen ophalen van de web map.

# Verwachte module importeren
import verwachting
importeer os
# Voer een eenvoudige opdracht uit
print("De huidige werkmap: \n%s" %pexpect.uitvoeren('pwd').decoderen("utf-8"))
# Haal de informatie van een bepaald bestand op
bestandsnaam = input("Vul een bestaande bestandsnaam in: ")
# Controleer of het bestand bestaat of niet
als het goed is.pad.bestaat (bestandsnaam):
output = verwachting.run("ls -l "+bestandsnaam, withexitstatus=0)
print("Informatie van een bepaald bestand: \n%s" %output.decoderen("utf-8"))
anders:
print("Bestand bestaat niet.")
# Haal de bestanden en map van een bepaalde map op met het ssh-commando
output = verwachting.run("ssh [e-mail beveiligd] 'ls web/'", events='(?i)wachtwoord':'12345\n')
print("\nDe uitvoer van het ssh-commando: \n%s" %output.decoderen("utf-8"))

Uitgang:

De volgende uitvoer zal verschijnen na het uitvoeren van het bovenstaande script:. In de uitvoer, doc1.py heeft gegeven als de bestandsnaam, en de details van dit bestand zijn getoond. Vervolgens de lijst met alle bestanden van de web map is weergegeven met ssh verbinding.

Spawn-klasse gebruiken

De syntaxis van de spawn-klasse wordt hieronder gegeven:. De constructor van deze klasse kan veel argumenten gebruiken voor veel doeleinden. Het eerste argument is verplicht dat de opdracht voor uitvoering zal nemen.

class spawn  __init __ (self, command, args=[], timeout=30, maxread=2000, zoekvenster size=none, logfile=none, cwd=none, env=none)

Voorbeeld-2: Eenvoudig gebruik van spawn-klasse

Het eenvoudige gebruik van de spawn-klasse is aangetoond in het volgende script:. De 'datum' is hier uitgevoerd met behulp van de spawn-klasse. De uitvoer van de opdracht wordt opgehaald door het object van de spawn-klasse te maken en de uitvoer wordt afgedrukt in een voor mensen leesbaar formaat met behulp van de decoderen() methode.

# Verwachte module importeren
importverwachting
# Voer het date-commando uit met spawn
kind = verwachting.spawn('datum')
# Lees de onderliggende uitvoer zonder EOF te genereren
kind.verwachten (verwachten).EOF)
# Bewaar de tekst die wordt verwacht door het tekenreekspatroon
output = kind.voordat
# Print de uitvoer
print("Vandaag is :", output.decoderen("utf-8"))

Uitgang:

De volgende uitvoer zal verschijnen na het uitvoeren van het bovenstaande script:.

Voorbeeld-3: Lees de inhoud van de map met ssh-verbinding

Het maken van een ssh-verbinding en het lezen van de lijst met alle bestanden en mappen van een bepaalde map is weergegeven in het volgende script:.  Hier wordt het wachtwoord van de gedefinieerde gebruiker overgenomen van de gebruiker om een ​​ssh-verbinding te maken met behulp van de spawn-klasse. Als het opgegeven wachtwoord onjuist is, wordt het script beëindigd door een foutmelding weer te geven.  Als het opgegeven wachtwoord correct is, maar de terminal niet is gedefinieerd, zal het script het succesbericht voor de verbinding weergeven, het terminaltype verzenden en het verwachte patroon van de opdrachtprompt definiëren. Als het wachtwoord correct is en de terminal is gedefinieerd, toont het script het succesbericht en de shell-opdrachtprompt.

# Verwachte module importeren
import verwachting
# Stel de gebruikersnaam in voor ssh-verbinding
gebruikersnaam = '[e-mail beveiligd]'
# Neem een ​​geldig wachtwoord van de gebruiker
Wachtwoord = input("Voer het inlogwachtwoord van %s in: " %gebruikersnaam)
# Voer het ssh-commando uit met spawn
kind = verwachting.spawn('ssh ' + gebruikersnaam)
# Wacht op het wachtwoord
kind.verwachten('wachtwoord:')
# Stuur het wachtwoord van de gebruiker
kind.verzendlijn (wachtwoord)
# Verwachte drie output
ik = kind.verwachten (['Toestemming geweigerd', 'Terminaltype', '[#\$] '])
# ik zal 0 zijn als ssh geen verbinding kan maken
als ik == 0:
print("Toestemming geweigerd door host. Niet mogelijk om in te loggen")
kind.doden(0)
# ik zal 1 zijn als ssh verbinding kan maken maar de terminal niet is ingesteld
elif ik == 1:
print('Succesvol verbonden'.\nTerminaltype is niet ingesteld.')
kind.verzendlijn('vt100')
kind.verwachten('[#\$]')
# ik zal 2 zijn als ssh verbinding kan maken en terminal is ingesteld
elif ik == 2:
print('Succesvol verbonden'.')
prompt = kind.na
print('Shell-opdrachtprompt:', prompt.decoderen("utf-8"))

Uitgang:

De volgende uitvoer verschijnt wanneer het bovenstaande script wordt uitgevoerd met het verkeerde wachtwoord:.

De volgende uitvoer zal verschijnen wanneer het bovenstaande script wordt uitgevoerd met het juiste wachtwoord:.

Conclusie

pexpect is een zeer nuttige module voor Python-gebruikers die hen helpt hun normale taken automatisch uit te voeren. Het basisgebruik van de pexpect-module van Python is in deze tutorial beschreven aan de hand van eenvoudige voorbeelden om de gebruikers te helpen met deze module aan de slag te gaan.

OpenTTD versus Simutrans
Je eigen transportsimulatie maken kan leuk, ontspannend en buitengewoon aanlokkelijk zijn. Daarom moet je ervoor zorgen dat je zoveel mogelijk spellen...
OpenTTD-zelfstudie
OpenTTD is een van de meest populaire simulatiegames voor bedrijven die er zijn. In dit spel moet je een geweldig transportbedrijf creëren. U begint e...
SuperTuxKart voor Linux
SuperTuxKart is een geweldige titel die is ontworpen om je de Mario Kart-ervaring gratis te bieden op je Linux-systeem. Het is behoorlijk uitdagend en...