Heim > Backend-Entwicklung > Python-Tutorial > Der Unterprozess führt Linux-Befehle stapelweise in Python aus

Der Unterprozess führt Linux-Befehle stapelweise in Python aus

不言
Freigeben: 2018-04-27 11:55:43
Original
3410 Leute haben es durchsucht

In diesem Artikel wird ausführlich erläutert, wie Sie mithilfe von Unterprozessen Linux-Befehle stapelweise in Python ausführen können.

Die relevanten Module und Funktionen, die Shell-Befehle ausführen können, sind:

  • os.system

  • os.spawn

  • os.popen --obsolete

  • popen --obsolete

  • Befehle --obsolete, 3 . Entfernt von

Unterprozess

Aufruf

führt den Befehl aus und gibt den Statuscode zurück

>>> import subprocess
>>> ret = subprocess.call(["ls", "-l"], shell=False)
total 4684
-rw-r--r-- 1 root root   454 May 5 12:20 aa.py
-rw-r--r-- 1 root root    0 May 8 16:51 aa.txt
-rw-r--r-- 1 root root 4783286 Apr 11 16:39 DockerToolbox.exe
-rw-r--r-- 1 root root   422 May 5 12:20 ip_info.txt
-rw-r--r-- 1 root root   718 Apr 19 10:52 my.cnf
>>> ret = subprocess.call("ls -l", shell=True)
total 4684
-rw-r--r-- 1 root root   454 May 5 12:20 aa.py
-rw-r--r-- 1 root root    0 May 8 16:51 aa.txt
-rw-r--r-- 1 root root 4783286 Apr 11 16:39 DockerToolbox.exe
-rw-r--r-- 1 root root   422 May 5 12:20 ip_info.txt
-rw-r--r-- 1 root root   718 Apr 19 10:52 my.cnf
>>> print(ret)
0
Nach dem Login kopieren

check_call

Führen Sie den Befehl aus. Wenn der Ausführungsstatuscode 0 ist, geben Sie 0 zurück, andernfalls wird eine Ausnahme ausgelöst

>>> subprocess.check_call(["ls", "-l"])
total 4684
-rw-r--r-- 1 root root   454 May 5 12:20 aa.py
-rw-r--r-- 1 root root    0 May 8 16:51 aa.txt
-rw-r--r-- 1 root root 4783286 Apr 11 16:39 DockerToolbox.exe
-rw-r--r-- 1 root root   422 May 5 12:20 ip_info.txt
-rw-r--r-- 1 root root   718 Apr 19 10:52 my.cnf
0
>>> subprocess.check_call("exit 1", shell=True)
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
 File "/usr/local/python3.5/lib/python3.5/subprocess.py", line 581, in check_call
  raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command &#39;exit 1&#39; returned non-zero exit status 1
Nach dem Login kopieren

check_output

Führen Sie den Befehl aus. Wenn der Statuscode 0 ist, geben Sie das Ausführungsergebnis zurück. andernfalls eine Ausnahme auslösen

>>> subprocess.check_output(["echo", "Hello World!"])
b&#39;Hello World!\n&#39;
>>> subprocess.check_output("exit 1", shell=True)
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
 File "/usr/local/python3.5/lib/python3.5/subprocess.py", line 626, in check_output
  **kwargs).stdout
 File "/usr/local/python3.5/lib/python3.5/subprocess.py", line 708, in run
  output=stdout, stderr=stderr)
subprocess.CalledProcessError: Command &#39;exit 1&#39; returned non-zero exit status 1
Nach dem Login kopieren

subprocess.Popen(...)

Wird zur Ausführung von Komplexen verwendet Systembefehle

Parameter:


args: Shell-Befehl, der ein String- oder Sequenztyp sein kann (z. B. Liste, Tupel)

bufsize: Gibt den Puffer an. 0 keine Pufferung, 1 Zeilenpufferung, andere Puffergrößen, negative Systempufferung


stdin, stdout, stderr: stellen jeweils die Standardeingabe-, Ausgabe- und Fehlerhandles des Programms dar


preexec_fn: nur gültig unter Unix-Plattform, wird verwendet, um ein aufrufbares Objekt anzugeben, das aufgerufen wird, bevor der untergeordnete Prozess ausgeführt wird


close_sfs: unter Windows-Plattform, wenn close_fds Wenn auf True gesetzt, das Der neu erstellte untergeordnete Prozess erbt nicht die Eingabe-, Ausgabe- und Fehlerpipes des übergeordneten Prozesses.


Sie können close_fds also nicht auf True setzen und gleichzeitig die Standardeingabe, -ausgabe und -fehler (stdin, stdout, stderr) des untergeordneten Prozesses umleiten.


Shell: Wie oben


cwd: wird verwendet, um das aktuelle Verzeichnis des untergeordneten Prozesses festzulegen


env: wird verwendet, um das anzugeben Umgebungsvariable des untergeordneten Prozesses. Wenn env = None, werden die Umgebungsvariablen des untergeordneten Prozesses vom übergeordneten Prozess geerbt.


universal_newlines: Verschiedene Systeme haben unterschiedliche Zeilenumbrüche, True -> Stimmen Sie der Verwendung von n zu


Startupinfo und Creationflags sind nur unter Windows gültig


Wird an die zugrunde liegende Funktion CreateProcess() übergeben, um einige Eigenschaften des untergeordneten Prozesses festzulegen, z. B. das Erscheinungsbild des Hauptfensters, die Priorität des Prozesses usw.


Gewöhnliche Befehle ausführen

>>> import subprocess
>>> ret1 = subprocess.Popen(["mkdir","t1"])
>>> ret2 = subprocess.Popen("mkdir t2", shell=True)
>>> print(ret1)
<subprocess.Popen object at 0x7f4d7609dd30>
>>> print(ret2)
<subprocess.Popen object at 0x7f4d7609dc18>
Nach dem Login kopieren

Es gibt zwei Arten von Befehlen, die in das Terminal eingegeben werden:

Eingabe, um die Ausgabe zu erhalten, wie zum Beispiel: ifconfig

  • Betreten Sie eine bestimmte Umgebung, verlassen Sie sich darauf und geben Sie sie dann ein, z. B.: Python

  • >>> import subprocess
    >>> obj = subprocess.Popen("mkdir t3", shell=True, cwd=&#39;/tmp/&#39;,)
    >>> import subprocess
    >>> obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
    >>> obj.stdin.write("print(1)\n")
    9
    >>> obj.stdin.write("print(2)")
    8
    >>> obj.stdin.close()
    >>> cmd_out = obj.stdout.read()
    >>> obj.stdout.close()
    >>> cmd_error = obj.stderr.read()
    >>> obj.stderr.close()
    >>> print(cmd_out)
    1
    2
    >>> print(cmd_error)
    Nach dem Login kopieren

>>> import subprocess
>>> 
>>> obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
>>> obj.stdin.write("print(1)\n")
9
>>> obj.stdin.write("print(2)")
8
>>> 
>>> out_error_list = obj.communicate()
>>> print(out_error_list)
(&#39;1\n2\n&#39;, &#39;&#39;)
Nach dem Login kopieren

>>> obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
>>> out_error_list = obj.communicate(&#39;print("hello")&#39;)
>>> print(out_error_list)
(&#39;hello\n&#39;, &#39;&#39;)
Nach dem Login kopieren

Verwandte Empfehlungen:

Verwenden Sie Python, um Shell-Skripte dynamisch auszuführen Übertragungsparameter und grundlegende Verwendung von Unterprozessen

Einführung und Verwendung des Unterprozessmoduls

Detaillierte Einführung in das Subprozess-Unterprozesspaket der Python-Standardbibliothek

Das obige ist der detaillierte Inhalt vonDer Unterprozess führt Linux-Befehle stapelweise in Python aus. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage