Modul subproces, python 3 pentru incepatori si manechine

Modulul de subproces este responsabil pentru efectuarea următoarelor acțiuni: generarea de noi procese, conectarea la fluxurile de intrare standard, ieșirea standard, ieșirea standard a mesajelor de eroare și obținerea codurilor de returnare din aceste procese.

Abordarea recomandată de a lucra cu subprocesele este de a folosi următoarele funcții de ajutor pentru toate cazurile în care se pot ocupa. Pentru cazuri mai complexe, interfața Popen poate fi utilizată direct.

subprocess.call (args, *, stdin = Nimic, stdout = Nimic, stderr = Nimic, shell = False, timeout = None) - execută o comandă descrisă args. El așteaptă comanda, iar apoi returnează codul de retur.

Argumentele de mai sus sunt doar cele mai des întâlnite. Funcția de semnătură completă este aproape aceeași cu cea a constructorului Popen. Termenul de expirare este transferat la Popen.wait (). Dacă expira timpul de expirare, procesul copilului va fi ucis, iar apoi excepția TimeoutExpired va fi ridicată.

subprocess.check_call (args, *, stdin = Nimic, stdout = Nimic, stderr = Nimic, shell = False, timeout = None) - execută o comandă descrisă args. Se așteaptă ca pentru a finaliza comanda, și apoi se termină în cazul în care codul de retur 0, sau ridică o excepție CalledProcessError, care atribut obiect returnează un cod de iesire-retur.

subprocess.check_output (args, *, intrare = Nici una, stdin = Nici unul, stderr = Nici unul, coajă = false, universal_newlines = false, timeout = Fără) - execută comanda și returnează ieșirea sa. Creste excepție CalledProcessError, în cazul în care un cod de întoarcere non-zero.

Crearea și gestionarea noilor procese din acest modul sunt tratate de clasa Popen. Oferă o mai mare flexibilitate, astfel încât dezvoltatorii să poată face față cazurilor mai puțin frecvente care nu sunt acoperite de funcții ușor de utilizat.

subprocess.DEVNULL este o valoare care poate fi folosită ca argument pentru stdin, stdout sau stderr. Aceasta înseamnă că va fi folosit un fișier devnull special.

subprocess.PIPE este o valoare care poate fi folosită ca argument pentru stdin, stdout sau stderr. Aceasta înseamnă că va fi creată o țeavă pentru procesul copilului.

subprocess.STDOUT este o valoare care poate fi folosită ca argument pentru stderr. Aceasta înseamnă că debitul de eroare va fi redirecționat către fluxul de ieșire.

Clasa subprocess.Popen (args, bufsize = -1, executabil = Fără, stdin = Nimic, stdout = Nimic, stderr = Nimic, preexec_fn = Nimic, close_fds = True, shell = False, cwd = Nimic, env = None, universal_newlines = Fals, startupinfo = Nici unul, creationflags = 0, restore_signals = Adevărat, start_new_session = false, pass_fds = ()) - programul se execută într-un nou proces. args este șirul sau secvența argumentelor programului. De obicei, primul punct la un program executabil, și apoi argumentele, dar, de asemenea, se poate folosi parametrul executabil.

Metode din clasa Popen:

Popen.poll () - dacă procesul a fost finalizat, acesta va returna codul de returnare, în caz contrar Nimic.

Popen.wait (timeout = None) - așteaptă ca procesul să se termine și returnează un cod de returnare. Dacă în timpul expirării procesul nu sa terminat, excepția TimeoutExpired va fi ridicată (care poate fi interceptată, după care așteptați din nou).

Această metodă poate cauza blocarea (blocarea) dacă stdout = PIPE sau stderr = PIPE este setat, iar procesul copil generează o cantitate mare de date în stdout și stderr. Folosind comunicare () veți evita acest lucru.

Popen.communicate (intrare = Nici una, timeout = Fără) -, cooperarea cu procesul de: trimiterea datelor conținute în procesul de intrare la stdin așteaptă până când procesul returnează un tuplu flux de date de ieșire și de eroare. În acest caz, trebuie să setați popen valoare ȚEAVĂ pentru stdin (dacă doriți să trimiteți la stdin), stdout, stderr (dacă doriți să citiți rezultatul procesului de copil).

Dacă în timpul expirării procesul nu se încheie, excepția TimeoutExpired va fi ridicată (care poate fi interceptată, după care puteți comunica din nou sau ucide procesul copilului).

Popen.send_signal (semnal) - trimite un semnal de semnal.

Popen.terminate () - oprește procesul copilului.

Popen.kill () ucide procesul copilului.