Python

Kako uporabljati pexpect v Pythonu

Kako uporabljati pexpect v Pythonu

pexpect je priljubljen modul Python za izvajanje različnih vrst avtomatiziranih nalog. Različne vrste interaktivnih aplikacij, kot so telnet, ssh, ftp itd., je mogoče avtomatizirati s tem modulom. Je čisti modul Python in ne potrebuje prevajalnika C ali razširitev TCL ali Expect, kot pričakujejo drugi moduli. Z lahkoto deluje samo z uporabo tolmača Python.  Ta modul se lahko uporablja na dva načina. Eden od načinov je uporaba teči () funkcijo, drug način pa je uporaba drsti razred. The teči () funkcija je enostavna za uporabo kot drstni razred in samodejno opravlja naloge. Določen ukaz ali program lahko izvede teči () funkcija, ki vrne izhod. To funkcijo lahko uporabite kot alternativo os.sistem () funkcijo. The drsti razred je močnejši od teči () funkcija, ki lahko ustvari podrejeni program, komunicira z njim s pošiljanjem vnosa in čakanjem na odgovor. Ta modul je privzeto nameščen v python3. V tej vadnici sta prikazana dva načina uporabe tega modula.

Uporaba funkcije run ()

Sintaksa:

Sintaksa teči () funkcija je navedena spodaj.  Ima veliko argumentov za različne namene. Toda večinoma se uporabljajo prvi 3 ali 4 argumenti. Prvi argument te funkcije je obvezen in sprejme ukaz, ki ga bo ta funkcija izvedla. Vrne lahko več izhodov. Če je zhexitstatusom argument se uporablja z Lažno vrednost bo vrnil samo izhod ukaza.

zaženi (ukaz, timeout = 30, withexitstatus = False, dogodki = None, extra_args = None, logfile = None, cwd = None, env = None, ** kwargs)

Primer-1: Različne uporabe funkcije run ()

Tri različne uporabe teči () funkcije so prikazane v naslednjem skriptu. "pwd'izhod ukaza se izvede v prvem teči () funkcija, ki bo prikazala trenutno pot delovnega imenika. Nato, teči () funkcija se uporablja za določanje podrobnosti določene datoteke, ime datoteke pa bo uporabniku odvzeto. Tretji teči () funkcija se uporablja za izdelavo ssh in poiąčite vse datoteke in mape iz splet mapo.

# Uvozi modul pexpect
uvozni pexpect
uvoz os
# Zaženite preprost ukaz
print ("Trenutni delovni imenik: \ n% s"% pexpect.zaženi ('pwd').dekodiraj ("utf-8"))
# Pridobite informacije o določeni datoteki
filename = input ("Vnesite obstoječe ime datoteke:")
# Preverite, ali datoteka obstaja ali ne
če os.pot.obstaja (ime datoteke):
izhod = pexpect.zaženi ("ls -l" + ime datoteke, withexitstatus = 0)
print ("Podatki o določeni datoteki: \ n% s"% izhod.dekodiraj ("utf-8"))
sicer:
print ("Datoteka ne obstaja.")
# Z ukazom ssh pridobite datoteke in mape določenega imenika
izhod = pexpect.run ("ssh [email protected] 'ls web /'", dogodki = '(?i) geslo ':' 12345 \ n ')
print ("\ nIzhod iz ukaza ssh: \ n% s"% izhod.dekodiraj ("utf-8"))

Izhod

Naslednji izhod se bo prikazal po izvedbi zgornjega skripta. V izhodu, doc1.py je dal kot ime datoteke, prikazane so podrobnosti te datoteke. Nato seznam vseh datotek splet mapa prikazana z ssh povezavo.

Uporaba razreda drsti

Sintaksa razreda drsti je podana spodaj. Konstruktor tega razreda lahko za številne namene uporabi veliko argumentov. Prvi argument je obvezen, da bo ukaz izveden.

drst razreda __init __ (self, command, args = [], timeout = 30, maxread = 2000, velikost okna iskanja = none, logfile = none, cwd = none, env = none)

Primer-2: Preprosta uporaba razreda drsti

Preprosta uporaba razreda drsti je prikazana v naslednjem skriptu. "datum'tukaj je bil izveden ukaz z uporabo razreda spawn. Izhod ukaza bo pridobljen z ustvarjanjem predmeta razreda drstitve, izhod pa bo natisnjen v človeško berljivi obliki z uporabo dekodiraj () metoda.

# Uvozi modul pexpect
uvozni pexpect
# Zaženite ukaz datum z uporabo drsti
otrok = pexpect.drsti ('datum')
# Preberite podrejeni izhod brez ustvarjanja EOF
otrok.pričakujte (pexpect.EOF)
# Shranite besedilo, ki ga pričakuje vzorec niza
output = otrok.prej
# Natisnite izhod
print ("Danes je:", izhod.dekodiraj ("utf-8"))

Izhod

Naslednji izhod se bo prikazal po izvedbi zgornjega skripta.

Primer-3: Preberite vsebino imenika s pomočjo povezave ssh

Ustvarjanje ssh povezave in branje seznama vseh datotek in map določenega imenika sta prikazana v naslednjem skriptu.  Tu bo uporabniku odvzeto geslo določenega uporabnika za vzpostavitev povezave ssh z uporabo razreda spawn. Če je dano geslo napačno, bo skript zaključen s prikazom sporočila o napaki.  Če je dano geslo pravilno, vendar terminal ni definiran, bo skript prikazal sporočilo o uspehu povezave, poslal tip terminala in določil pričakovani vzorec ukaznega poziva. Če je geslo pravilno in je terminal definiran, bo skript prikazal sporočilo o uspehu in ukazni poziv lupine.

# Uvozi modul pexpect
uvozni pexpect
# Nastavite uporabniško ime za povezavo ssh
uporabniško ime = '[e-pošta zaščitena]'
# Od uporabnika vzemite veljavno geslo
Password = input ("Vnesite geslo za prijavo% s:"% username)
# Zaženite ukaz ssh s pomočjo drstitve
otrok = pexpect.spawn ('ssh' + uporabniško ime)
# Počakajte na geslo
otrok.pričakujte ('geslo:')
# Pošlji uporabniško geslo
otrok.pošiljanje (geslo)
# Pričakovani trije izhodi
i = otrok.pričakovati (['Dovoljenje zavrnjeno', 'Vrsta terminala', '[# \ $]'])
# i bo 0, če se ssh ne more povezati
če i == 0:
print ("gostitelj zavrnil dovoljenje. Ne morem se prijaviti ")
otrok.ubiti (0)
# i bo 1, če se ssh lahko poveže, terminal pa ni nastavljen
elif i == 1:
print ('Povezava uspešna.\ nVrste terminala ni nastavljena.')
otrok.pošiljanje ('vt100')
otrok.pričakovati ('[# \ $]')
# i bo 2, če se ssh lahko poveže in je terminal nastavljen
elif i == 2:
print ('Povezava uspešna.')
poziv = otrok.po
print ('Ukazni poziv lupine:', poziv.dekodiraj ("utf-8"))

Izhod

Naslednji izhod se prikaže, ko se zgornji skript izvede z napačnim geslom.

Ko se zgornji skript izvede s pravilnim geslom, se prikaže naslednji izhod.

Zaključek

pexpect je zelo koristen modul za uporabnike Pythona, ki jim pomaga pri samodejnem opravljanju rednih nalog. V tej vadnici so opisani zelo osnovni načini uporabe modula pexpect v Pythonu z enostavnimi primeri, ki uporabnikom pomagajo pri začetku dela s tem modulom.

Kako uporabljati AutoKey za avtomatizacijo iger Linux
AutoKey je namizni pripomoček za avtomatizacijo za Linux in X11, programiran v Python 3, GTK in Qt. Z njegovo funkcijo skriptiranja in MACRO lahko avt...
Kako prikazati števec FPS v igrah Linux
Linux gaming je dobil velik zagon, ko je Valve leta 2012 napovedal podporo Linuxu za odjemalca Steam in njihove igre. Od takrat se je veliko AAA in in...
Kako prenesti in igrati Sid Meier's Civilization VI v Linuxu
Uvod v igro Civilization 6 je sodoben pogled na klasični koncept, uveden v seriji iger Age of Empires. Ideja je bila dokaj preprosta; začeli bi v zelo...