Inhaltsverzeichnis
1. Einführung " >1. Einführung
2. Verwendung alter Module " >2. Verwendung alter Module
1.os.system()
Betriebssystembefehle ausführen, ausgeben Ergebnisse auf dem Bildschirm und geben nur den Befehlsausführungsstatus zurück (0: Erfolg, ungleich 0: Fehler)
2.
3. Unterprozessmodul " > 3. Unterprozessmodul
1. subprocess.run()" >1. subprocess.run()
" > 4. Unterprozess. Popen()
" >1. Standardausgabe
4、poll()
5、wait()
6、terminate()
7、pid
Heim Backend-Entwicklung Python-Tutorial Einführung und Verwendung des Unterprozessmoduls

Einführung und Verwendung des Unterprozessmoduls

Jul 23, 2017 pm 01:46 PM
subprocess 模块

1. Unterprozess und häufig verwendete Kapselungsfunktionen
Beim Ausführen von Python erstellen und führen wir einen Prozess aus. Wie ein Linux-Prozess kann ein Prozess einen untergeordneten Prozess forken und den untergeordneten Prozess ein anderes Programm ausführen lassen. In Python verwenden wir das Unterprozesspaket in der Standardbibliothek, um einen Unterprozess zu forken und ein externes Programm auszuführen.
Das Unterprozesspaket definiert mehrere Funktionen zum Erstellen von Unterprozessen. Diese Funktionen erstellen Unterprozesse auf unterschiedliche Weise, sodass wir je nach Bedarf einen davon auswählen können. Darüber hinaus bietet Subprocess auch einige Tools zum Verwalten von Standard-Streams und -Pipes, um die Textkommunikation zwischen Prozessen zu nutzen.

subprocess.call()
Der übergeordnete Prozess wartet auf den Abschluss des untergeordneten Prozesses
Exit-Informationen zurückgeben (Rückgabecode, entspricht dem Linux-Exit-Code)

subprocess.check_call()
Übergeordneter Prozess wartet auf den Abschluss des Unterprozesses
Return 0
Überprüfen Sie die Exit-Informationen. Wenn der Returncode nicht 0 ist, wird der Fehler subprocess.CalledProcessError ausgelöst. Sie können try verwenden ...außer... zur Prüfung

subprocess.check_output()
Der übergeordnete Prozess wartet auf den Abschluss des untergeordneten Prozesses
Gibt das Ausgabeergebnis des untergeordneten Prozesses an die Standardausgabe zurück
Überprüfen Sie die Exit-Informationen. Wenn der Returncode nicht 0 ist, wird der Fehler subprocess.CalledProcessError ausgelöst. Dieses Objekt enthält das Returncode-Attribut und das Ausgabeattribut. Das Ausgabeattribut ist das Ausgabeergebnis der Standardausgabe und kann mit try überprüft werden. außer....

1. Einführung

Der Unterprozess wurde erstmals in Version 2.4 eingeführt. Wird verwendet, um untergeordnete Prozesse zu erzeugen, ihre Eingaben/Ausgaben/Fehler über Pipes zu verbinden und ihre Rückgabewerte zu erhalten.

Unterprozess wird verwendet, um mehrere alte Module und Funktionen zu ersetzen:

  • os.system

  • os.spawn*

  • os.popen*

  • popen2.*

  • Befehle.*

Beim Ausführen von Python haben wir Sie alle erstellen und führen einen Prozess aus. Unter Linux kann ein Prozess einen untergeordneten Prozess verzweigen und den untergeordneten Prozess ein anderes Programm ausführen lassen. In Python verwenden wir das Unterprozesspaket in der Standardbibliothek, um einen Unterprozess zu forken und ein externes Programm auszuführen. Das Unterprozesspaket definiert mehrere Funktionen zum Erstellen von Unterprozessen. Diese Funktionen erstellen Unterprozesse auf unterschiedliche Weise, sodass wir je nach Bedarf einen davon auswählen können. Darüber hinaus bietet Subprocess auch einige Tools zum Verwalten von Standard-Streams und -Pipes, um die Textkommunikation zwischen Prozessen zu nutzen.

2. Verwendung alter Module

1.os.system()

Betriebssystembefehle ausführen, ausgeben Ergebnisse auf dem Bildschirm und geben nur den Befehlsausführungsstatus zurück (0: Erfolg, ungleich 0: Fehler)

import os

>>> a = os.system("df -Th")
Filesystem     Type   Size  Used Avail Use% Mounted on
/dev/sda3      ext4   1.8T  436G  1.3T  26% /
tmpfs          tmpfs   16G     0   16G   0% /dev/shm
/dev/sda1      ext4   190M  118M   63M  66% /boot

>>> a
0         # 0 表示执行成功


# 执行错误的命令
>>> res = os.system("list")
sh: list: command not found
>>> res
32512       # 返回非 0 表示执行错误
Nach dem Login kopieren

 

2.

Führen Sie den Befehl des Betriebssystems aus und das Ergebnis wird im Speicher gespeichert, der mit der Methode read() ausgelesen werden kann

import os

>>> res = os.popen("ls -l")

# 将结果保存到内存中
>>> print res
<open file &#39;ls -l&#39;, mode &#39;r&#39; at 0x7f02d249c390>

# 用read()读取内容
>>> print res.read()
total 267508
-rw-r--r--  1 root root    260968 Jan 27  2016 AliIM.exe
-rw-------. 1 root root      1047 May 23  2016 anaconda-ks.cfg
-rw-r--r--  1 root root   9130958 Nov 18  2015 apache-tomcat-8.0.28.tar.gz
-rw-r--r--  1 root root         0 Oct 31  2016 badblocks.log
drwxr-xr-x  5 root root      4096 Jul 27  2016 certs-build
drwxr-xr-x  2 root root      4096 Jul  5 16:54 Desktop
-rw-r--r--  1 root root      2462 Apr 20 11:50 Face_24px.ico
Nach dem Login kopieren

 

3. Unterprozessmodul

1. subprocess.run()

>>> import subprocess
# python 解析则传入命令的每个参数的列表
>>> subprocess.run(["df","-h"])
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-LogVol00
                      289G   70G  204G  26% /
tmpfs                  64G     0   64G   0% /dev/shm
/dev/sda1             283M   27M  241M  11% /boot
CompletedProcess(args=[&#39;df&#39;, &#39;-h&#39;], returncode=0)

# 需要交给Linux shell自己解析,则:传入命令字符串,shell=True
>>> subprocess.run("df -h|grep /dev/sda1",shell=True)
/dev/sda1             283M   27M  241M  11% /boot
CompletedProcess(args=&#39;df -h|grep /dev/sda1&#39;, returncode=0)
Nach dem Login kopieren

 🎜>

2. subprocess.call()

Führen Sie den Befehl aus und geben Sie das Ergebnis und den Ausführungsstatus des Befehls zurück, 0 oder nicht 0

>>> res = subprocess.call(["ls","-l"])
总用量 28
-rw-r--r--  1 root root     0 6月  16 10:28 1
drwxr-xr-x  2 root root  4096 6月  22 17:48 _1748
-rw-------. 1 root root  1264 4月  28 20:51 anaconda-ks.cfg
drwxr-xr-x  2 root root  4096 5月  25 14:45 monitor
-rw-r--r--  1 root root 13160 5月   9 13:36 npm-debug.log

# 命令执行状态
>>> res
0
Nach dem Login kopieren
 

3. subprocess.check_call()

Führen Sie den Befehl aus und geben Sie das Ergebnis und den Status zurück. Wenn ein Ausführungsfehler vorliegt, wird ein Fehler angezeigt Ausnahme wird ausgelöst

>>> subprocess.check_call(["ls","-l"])
总用量 28
-rw-r--r--  1 root root     0 6月  16 10:28 1
drwxr-xr-x  2 root root  4096 6月  22 17:48 _1748
-rw-------. 1 root root  1264 4月  28 20:51 anaconda-ks.cfg
drwxr-xr-x  2 root root  4096 5月  25 14:45 monitor
-rw-r--r--  1 root root 13160 5月   9 13:36 npm-debug.log
0

>>> subprocess.check_call(["lm","-l"])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib64/python2.7/subprocess.py", line 537, in check_call
    retcode = call(*popenargs, **kwargs)
  File "/usr/lib64/python2.7/subprocess.py", line 524, in call
    return Popen(*popenargs, **kwargs).wait()
  File "/usr/lib64/python2.7/subprocess.py", line 711, in __init__
    errread, errwrite)
  File "/usr/lib64/python2.7/subprocess.py", line 1327, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory
Nach dem Login kopieren

4. subprocess.getstatusoutput()

Akzeptiert Befehle in Form von Zeichenfolgen und gibt sie zurück ein Ergebnis in Form eines Tupels. Das erste Element ist der Befehlsausführungsstatus und das zweite ist das Ausführungsergebnis

#执行正确
>>> subprocess.getstatusoutput(&#39;pwd&#39;)
(0, &#39;/root&#39;)

#执行错误
>>> subprocess.getstatusoutput(&#39;pd&#39;)
(127, &#39;/bin/sh: pd: command not found&#39;)
Nach dem Login kopieren
 

5. subprocess.getoutput()

akzeptiert Befehle in Stringform und gibt das Ausführungsergebnis zurück

>>> subprocess.getoutput(&#39;pwd&#39;)
&#39;/root&#39;
Nach dem Login kopieren
 

6. subprocess.check_output()

Führen Sie den Befehl aus und geben Sie das Ausführungsergebnis zurück, anstatt zu drucken

>>> res = subprocess.check_output("pwd")
>>> res
b&#39;/root\n&#39; # 结果以字节形式返回
Nach dem Login kopieren
 

4. Unterprozess. Popen()

Tatsächlich wird die obige Methode von subprocess verwendet und ist alles eine Kapselung von subprocess.Popen. Schauen wir uns diese Popen-Methode an.

1. Standardausgabe

Standardausgabe

>>> res = subprocess.Popen("ls /tmp/yum.log", shell=True, stdout=subprocess.PIPE)  # 使用管道
>>> res.stdout.read()    # 标准输出
b&#39;/tmp/yum.log\n&#39;

res.stdout.close()   # 关闭
Nach dem Login kopieren

 

2. stderr

Standardfehler

>>> import subprocess
>>> res = subprocess.Popen("lm -l",shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
# 标准输出为空
>>> res.stdout.read()
b&#39;&#39;

#标准错误中有错误信息
>>> res.stderr.read()
b&#39;/bin/sh: lm: command not found\n&#39;
Nach dem Login kopieren

  

注意:上面的提到的标准输出都为啥都需要等于subprocess.PIPE,这个又是啥呢?原来这个是一个管道,这个需要画一个图来解释一下:

4、poll()

定时检查命令有没有执行完毕,执行完毕后返回执行结果的状态,没有执行完毕返回None

>>> res = subprocess.Popen("sleep 10;echo &#39;hello&#39;",shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
>>> print(res.poll())
None
>>> print(res.poll())
None
>>> print(res.poll())
0
Nach dem Login kopieren

  

5、wait()

等待命令执行完成,并且返回结果状态

>>> obj = subprocess.Popen("sleep 10;echo &#39;hello&#39;",shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
>>> obj.wait()


# 中间会一直等待


0
Nach dem Login kopieren

  

6、terminate()

结束进程

import subprocess

>>> res = subprocess.Popen("sleep 20;echo &#39;hello&#39;",shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
>>> res.terminate()  # 结束进程
>>> res.stdout.read() 
b&#39;&#39;
Nach dem Login kopieren

7、pid

获取当前执行子shell的程序的进程号

import subprocess

>>> res = subprocess.Popen("sleep 5;echo &#39;hello&#39;",shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
>>> res.pid  # 获取这个linux shell 的 进程号
2778
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonEinführung und Verwendung des Unterprozessmoduls. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

WLAN-Erweiterungsmodul ist gestoppt [Fix] WLAN-Erweiterungsmodul ist gestoppt [Fix] Feb 19, 2024 pm 02:18 PM

Wenn es ein Problem mit dem WLAN-Erweiterungsmodul Ihres Windows-Computers gibt, kann dies dazu führen, dass Sie nicht mehr mit dem Internet verbunden sind. Diese Situation ist oft frustrierend, aber glücklicherweise enthält dieser Artikel einige einfache Vorschläge, die Ihnen helfen können, dieses Problem zu lösen und Ihre drahtlose Verbindung wieder ordnungsgemäß funktionieren zu lassen. Behebung, dass das WLAN-Erweiterbarkeitsmodul nicht mehr funktioniert Wenn das WLAN-Erweiterbarkeitsmodul auf Ihrem Windows-Computer nicht mehr funktioniert, befolgen Sie diese Vorschläge, um das Problem zu beheben: Führen Sie die Netzwerk- und Internet-Fehlerbehebung aus, um drahtlose Netzwerkverbindungen zu deaktivieren und wieder zu aktivieren. Starten Sie den WLAN-Autokonfigurationsdienst neu. Ändern Sie die Energieoptionen. Ändern Erweiterte Energieeinstellungen Netzwerkadaptertreiber neu installieren Einige Netzwerkbefehle ausführen Schauen wir uns das nun im Detail an

Das WLAN-Erweiterungsmodul kann nicht gestartet werden Das WLAN-Erweiterungsmodul kann nicht gestartet werden Feb 19, 2024 pm 05:09 PM

In diesem Artikel werden Methoden zur Behebung des Ereignisses ID10000 beschrieben, das darauf hinweist, dass das WLAN-Erweiterungsmodul nicht gestartet werden kann. Dieser Fehler kann im Ereignisprotokoll des Windows 11/10-PCs erscheinen. Das WLAN-Erweiterbarkeitsmodul ist eine Komponente von Windows, die es unabhängigen Hardwareanbietern (IHVs) und unabhängigen Softwareanbietern (ISVs) ermöglicht, Benutzern angepasste Features und Funktionen für drahtlose Netzwerke bereitzustellen. Es erweitert die Funktionalität nativer Windows-Netzwerkkomponenten durch Hinzufügen von Windows-Standardfunktionen. Das WLAN-Erweiterungsmodul wird im Rahmen der Initialisierung gestartet, wenn das Betriebssystem Netzwerkkomponenten lädt. Wenn beim WLAN-Erweiterungsmodul ein Problem auftritt und es nicht gestartet werden kann, wird möglicherweise eine Fehlermeldung im Protokoll der Ereignisanzeige angezeigt.

Python verwendet häufig Standardbibliotheken und Bibliotheken von Drittanbietern im 2-SYS-Modul Python verwendet häufig Standardbibliotheken und Bibliotheken von Drittanbietern im 2-SYS-Modul Apr 10, 2023 pm 02:56 PM

1. Einführung in das SYS-Modul Das zuvor vorgestellte OS-Modul ist hauptsächlich für das Betriebssystem gedacht, während das SYS-Modul in diesem Artikel hauptsächlich für den Python-Interpreter gedacht ist. Das sys-Modul ist ein Modul, das mit Python geliefert wird. Es ist eine Schnittstelle für die Interaktion mit dem Python-Interpreter. Das sys-Modul bietet viele Funktionen und Variablen für den Umgang mit verschiedenen Teilen der Python-Laufzeitumgebung. 2. Häufig verwendete Methoden des sys-Moduls Sie können mithilfe der dir()-Methode überprüfen, welche Methoden im sys-Modul enthalten sind: import sys print(dir(sys))1.sys.argv – Rufen Sie die Befehlszeilenparameter sys ab. argv wird verwendet, um den Befehl von außerhalb des Programms zu implementieren. Dem Programm werden Parameter übergeben und es kann die Befehlszeilenparameterspalte abrufen

Python-Programmierung: Detaillierte Erläuterung der wichtigsten Punkte bei der Verwendung benannter Tupel Python-Programmierung: Detaillierte Erläuterung der wichtigsten Punkte bei der Verwendung benannter Tupel Apr 11, 2023 pm 09:22 PM

Vorwort In diesem Artikel wird weiterhin das Python-Sammlungsmodul vorgestellt. Dieses Mal werden hauptsächlich die darin enthaltenen benannten Tupel vorgestellt, dh die Verwendung von benannten Tupeln. Fangen wir ohne Umschweife an – denken Sie daran, „Gefällt mir“, „Folgen“ und „Weiterleiten“ zu markieren. Sie können überall dort verwendet werden, wo reguläre Tupel verwendet werden, und bieten die Möglichkeit, auf Felder über den Namen statt über den Positionsindex zuzugreifen. Es stammt aus den in Python integrierten Modulsammlungen. Die verwendete allgemeine Syntax lautet: Sammlungen importieren XxNamedT

Wie funktioniert der Import von Python? Wie funktioniert der Import von Python? May 15, 2023 pm 08:13 PM

Hallo, mein Name ist somenzz, du kannst mich Bruder Zheng nennen. Der Import von Python ist sehr intuitiv, aber manchmal werden Sie feststellen, dass trotz des Vorhandenseins des Pakets immer noch ModuleNotFoundError auftritt. Der relative Pfad ist offensichtlich sehr korrekt, aber der Fehler ImportError:attemptedrelativeimportwithnoknownparentpackage importiert ein Modul im selben Verzeichnis ein anderes. Die Module des Verzeichnisses sind völlig unterschiedlich. Dieser Artikel hilft Ihnen, den Import zu vereinfachen, indem er einige Probleme analysiert, die bei der Verwendung des Imports auftreten. Auf dieser Grundlage können Sie problemlos Attribute erstellen.

So verwenden Sie DateTime in Python So verwenden Sie DateTime in Python Apr 19, 2023 pm 11:55 PM

Alle Daten werden zu Beginn automatisch mit einem „DOB“ (Geburtsdatum) versehen. Daher ist es unvermeidlich, dass bei der Verarbeitung von Daten irgendwann Datums- und Uhrzeitdaten auftreten. Dieses Tutorial führt Sie durch das Datetime-Modul in Python und die Verwendung einiger Peripheriebibliotheken wie Pandas und Pytz. In Python wird alles, was mit Datum und Uhrzeit zu tun hat, vom datetime-Modul verarbeitet, das das Modul weiter in fünf verschiedene Klassen unterteilt. Klassen sind einfach Datentypen, die Objekten entsprechen. Die folgende Abbildung fasst die fünf Datetime-Klassen in Python zusammen mit häufig verwendeten Attributen und Beispielen zusammen. 3 nützliche Snippets 1. Konvertieren Sie einen String in das Datetime-Format, möglicherweise mit datet

Ausführliche Erklärung der Funktionsweise von Ansible Ausführliche Erklärung der Funktionsweise von Ansible Feb 18, 2024 pm 05:40 PM

Das Funktionsprinzip von Ansible kann aus der obigen Abbildung verstanden werden: Die Verwaltungsseite unterstützt drei Methoden: Lokal, SSH und Zeromq, um eine Verbindung zur verwalteten Seite herzustellen. Dieser Teil entspricht der Verbindung Im obigen Architekturdiagramm können Sie den Anwendungstyp HostInventory (Hostliste) verwenden, um entsprechende Vorgänge über verschiedene Module zu implementieren und einen einzelnen Befehl auszuführen -hoc; Der Verwaltungsknoten kann eine Reihe von Aufgaben über Playbooks implementieren, z. B. die Installation und Bereitstellung von Webdiensten, die Stapelsicherung von Datenbankservern usw. Wir können Playbooks einfach so verstehen, wie das System vergeht

Ansible Ad-Hoc (Peer-to-Peer-Modus) Ansible Ad-Hoc (Peer-to-Peer-Modus) Feb 18, 2024 pm 04:48 PM

Offizielle Dokumentation: https://docs.ansible.com/ansible/latest/command_guide/intro_adhoc.html Einführung Ein Ad-hoc-Befehl ist ein Befehl, der vorübergehend eingegeben und ausgeführt wird und normalerweise zum Testen und Debuggen verwendet wird. Sie müssen nicht dauerhaft gespeichert werden. Einfach ausgedrückt ist Ad-hoc ein „Sofortbefehl“. Häufig verwendete Module 1. Befehlsmodul (Standardmodul) Das Standardmodul ist nicht so leistungsfähig wie die Shell. Grundsätzlich kann das Shell-Modul die Funktionen des Befehlsmoduls unterstützen. 【1】Help ansible-doccommand# Es wird empfohlen, das folgende ansible-doccomm zu verwenden

See all articles