Wie führe ich einen Befehl von Python aus und erhalte das Ergebnis? Wenn Sie Befehle direkt aus dem Skript ausführen können, können Sie sich die Mühe ersparen, Befehle auszuführen, um die Ergebnisse nach Abschluss der Skriptausführung zu verarbeiten.
Es gibt verschiedene Möglichkeiten, Befehle aus Python auszuführen, aber dieses Mal werde ich erklären, wie das Unterprozessmodul verwendet wird.
call Übergeben Sie den Befehl, den Sie ausführen möchten, im Listenformat, und der Prozess wird ausgeführt. Bei Erfolg wird 0 zurückgegeben.
In [1]: import subprocess
In [2]: subprocess.call(["ls", "-la"])
Out[2]: 0
Das Setzen von shell = True
ist praktisch, da Sie den Befehl wie folgt ausführen können.
In [3]: subprocess.call("ls -la", shell=True)
Out[3]: 0
check_call
Wenn Sie einen Befehl übergeben, der in call
nicht vorhanden ist, wird nur der Befehl error nicht gefunden
angezeigt. Wenn Sie jedoch check_call
verwenden, können Sie eine Ausnahme namens CalledProcessError
auslösen.
Ich habe eine Ausnahme namens "CalledProcessError".
In [5]: subprocess.check_call("lddd", shell=True)
/bin/sh: lddd: command not found
---------------------------------------------------------------------------
CalledProcessError Traceback (most recent call last)
<ipython-input-5-00471ece15fa> in <module>()
----> 1 subprocess.check_call("lddd", shell=True)
/Users/SoichiroMurakami/.pyenv/versions/anaconda-2.4.0/lib/python2.7/subprocess.pyc in check_call(*popenargs, **kwargs)
539 if cmd is None:
540 cmd = popenargs[0]
--> 541 raise CalledProcessError(retcode, cmd)
542 return 0
543
CalledProcessError: Command 'lddd' returned non-zero exit status 127
Es wird nur "Befehl nicht gefunden" zurückgegeben.
In [6]: subprocess.call("lddd", shell=True)
/bin/sh: lddd: command not found
Out[6]: 127
check_output
Sie können einen Befehl mit einem Argument ausführen und die Ausgabe als Zeichenfolge abrufen. Dies ist praktisch, wenn Sie das Ergebnis der Befehlsausführung in einem Skript verwenden möchten.
In [9]: cal_output = subprocess.check_output("cal", shell=True)
In [10]: print cal_output
November 2016
Sonntag Montag Dienstag Mittwoch Donnerstag Freitag Samstag
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Dies ist eine Ergänzung für andere Befehlsausführungsmethoden als das Unterprozessmodul. Es scheint zwei Methoden zu geben, die derzeit jedoch nicht empfohlen werden.
command
)command
)Recommended Posts