Es gibt ziemlich viele Möglichkeiten, Teilprozesse zu verwenden, daher werde ich die Punkte, die ich untersucht habe, ohne Verständnis zusammenfassen. Dieser Artikel ist für "Python 2.7", da ich zum Zeitpunkt meiner Recherche die "Python 2.7" -Umgebung als Anwendungsfall angenommen habe.
Grundsätzlich beziehen Sie sich bitte auf das offizielle Dokument unten. 17.1. Unterprozess - Unterprozessverwaltung - Python 2.7.x-Dokumentation
Insbesondere im Fall von Python 3.5 oder höher ist die Verwendung unterschiedlich, da der allgemeine Befehl run ()
hinzugefügt wird.
Bitte beziehen Sie sich auf die Formel ohne Umleitung, wie sie ist.
17.5. Unterprozess - Unterprozessverwaltung - Python 3.5.2-Dokumentation
import
import subprocess
subprocess.call -Standardausgabe / Standardfehler zum Zeitpunkt der Ausführung wird zum Zeitpunkt der Ausführung ausgegeben ・ Gibt einen Rückkehrcode sowohl unter normalen als auch unter abnormalen Bedingungen zurück
Ausführungsbeispiel
import subprocess
print '!!! start'
cmd = 'echo aaa'
retcode = subprocess.call(cmd.split())
print retcode
cmd = 'false'
retcode = subprocess.call(cmd.split())
print retcode
print '!!! end'
Ausgabe
aaa
!!! start
0
1
!!! end
subprocess.check_call
-Standardausgabe / Standardfehler zum Zeitpunkt der Ausführung wird zum Zeitpunkt der Ausführung ausgegeben
・ Gibt im Normalfall 0 Rückkehrcode zurück
・ Wenn ein Fehler auftritt, wird die Ausnahme subprocess.CalledProcessError
gesendet.
Ausführungsbeispiel
import subprocess
print '!!! start'
cmd = 'echo aaa'
retcode = subprocess.check_call(cmd.split())
print retcode
cmd = 'false'
try:
retcode = subprocess.check_call(cmd.split())
except subprocess.CalledProcessError as e:
print e.returncode
print e.cmd
print e.output
print '!!! end'
Ausgabe
aaa
!!! start
0
1
['false']
None
!!! end
subprocess.check_output
-Standardausgabe / Standardfehler zum Zeitpunkt der Ausführung wird zum Zeitpunkt der Ausführung ausgegeben
・ Gibt bei normaler Ausgabe die Standardausgabe zurück
・ Wenn ein Fehler auftritt, wird die Ausnahme subprocess.CalledProcessError
gesendet.
Ausführungsbeispiel
import subprocess
print '!!! start'
cmd = 'echo aaa'
d = subprocess.check_output(cmd.split())
print d,
cmd = 'unexist_command'
try:
d = subprocess.check_output(
cmd.split(),
stderr=subprocess.STDOUT,
shell=True)
print d,
except subprocess.CalledProcessError as e:
print e.returncode
print e.cmd
print e.output,
print '!!! end'
Ausgabe
!!! start
aaa
127
['unexist_command']
/bin/sh: unexist_command: command not found
!!! end
subprocess.check_output
wird ein Standardfehler angezeigtGeben Sie "stderr = subprocess.STDOUT" wie folgt an.
Anwendungsbeispiel
d = subprocess.check_output(
cmd.split(),
stderr=subprocess.STDOUT,
shell=True)
Angabe des Ausführungsverzeichnisses
subprocess.call(cmd, cwd=workdir)
Ein Ausführungsbeispiel ist unten gezeigt.
Ausführungsbeispiel
import subprocess
d1 = subprocess.check_output(['pwd']) #Ausgangsposition/tmp
d2 = subprocess.check_output(['pwd'], cwd='/tmp/hoge') #Bestätigung mit absolutem Pfad
d3 = subprocess.check_output(['pwd']) #Nicht von anderen Bewegungen betroffen
d4 = subprocess.check_output(['pwd'], cwd='./hoge') #Bestätigung mit relativem Pfad
print 'case 1:'
print d1,
print d2,
print 'case 2:'
print d3,
print d4,
Ausführungsbeispiel
case 1:
/tmp
/tmp/hoge
case 2:
/tmp
/tmp/hoge
python subprocess changing directory - Stack Overflow
Wenn Sie Ausführungsbefehle von außen abrufen, insbesondere wenn "shell = True" angegeben ist, kann ein Befehlsinjektionsangriff auftreten. Achten Sie daher auf die Sicherheit.
IPA ISEC Secure Programming-Kurs: Webanwendung Kapitel 6 Gegenmaßnahmen bei der Eingabe: Gegenmaßnahmen bei Befehlsinjektionsangriffen Code injection - Wikipedia
-Wenn in "check_output" "shell = True" angegeben ist, wird möglicherweise keine Standardausgabe / kein Standardfehler erhalten. (Leere Zeichenfolge wird zurückgegeben)
Verwenden Sie communic (), wenn Sie eine Ausgabe in Python subprocess-Qiita empfangen Um einen Befehl mit Python auszuführen - mit einem Becher!
Recommended Posts