[Python] Unix-Befehl ausführen (Unterprozess)

Aufbau

Umgebung: OSX Yosemite Bash Python3.5.0

Unix-Befehle

Mac OS X basiert auf UNIX, daher werde ich es verwenden. (ls, touch, cat, etc.)

os.system Standardbibliothek os Ich kann den Unix-Befehl auch hier verwenden, aber ich kann den Rückgabewert nicht als Zeichenfolge erhalten. (Vielleicht können Sie es bekommen, aber ich weiß nicht) (Es wird nur an Terminal ausgegeben) Normalerweise reicht dies aus, wenn es sich um ein Dateibetriebssystem mit Befehlen wie touch handelt. Wenn es sich um einen Befehl wie cat oder grep handelt, kann er nicht als Zeichenfolge abgerufen werden.

subprocess Klicken Sie hier für den Referenzlink 17.5. Unterprozess - Unterprozessverwaltung Verwenden Sie dazu subprocess.check_output. Als Verwendung geben Sie eine Zeichenfolge in das Argument ein. Es gibt jedoch zwei Möglichkeiten: Erstens, wenn Sie sie standardmäßig verwenden: check_output(["cut", "-d", "test.txt"]) Wird besorgt. Die andere Möglichkeit besteht darin, "shell = True" als Argument zu verwenden, damit es durch Übergeben einer Zeichenfolge ausgeführt werden kann. check_output("cut -d test.txt", shell=True) Für Details wird es wie folgt in die referenzierte URL geschrieben.

Unter Unix mit shell = False (Standard): In diesem Fall verwendet die Popen-Klasse os.execvp (), um das untergeordnete Programm auszuführen. Wenn eine Zeichenfolge als Argument angegeben wird, wird sie als Name oder Pfad des auszuführenden Programms verwendet. Das Programm funktioniert jedoch nur ohne Argumente.

Wenn shell = True unter Unix: Wenn args eine Zeichenfolge ist, geben Sie die Befehlszeilenzeichenfolge an, die über die Shell ausgeführt werden soll. Die Zeichenfolge muss genau mit dem Format übereinstimmen, das Sie an der Shell-Eingabeaufforderung eingeben. Wenn Sie beispielsweise einen Dateinamen haben, der Leerzeichen in der Zeichenfolge enthält, müssen Sie Escape- oder Backslash-Escapezeichen verwenden. Wenn args eine Zeichenfolge ist, wird das erste Element als Zeichenfolge an die Shell übergeben, die den Befehlsnamen und die verbleibenden Elemente als nachfolgende Argumente darstellt. Dies entspricht Popen unten.

Einfache Probe

Dies ist ein Beispiel (cut -d, -f2), das eine Datei entsprechend erstellt und die zweite Spalte erfasst. Da es sich um ein 3-System handelt, wird der Wert in Bytes zurückgegeben. (Es scheint eine Option (Schlüsselwortargument) zu geben, die str zurückgibt.) Im Fall von 3 Serien befindet sich das zurückgegebene Byte am Ende des Codes, da es sich jedoch um Bytes handelt. Wenn Sie jedoch "universal_newlines = True" hinzufügen, wird es als str zurückgegeben.

subprocess_test.py


>>> open("test.txt", 'w').write('\n'.join(([repr([i, i+1, i+2]).replace(' ', '') for i in range(5)])))
39
>>> open("test.txt").read()
'[0,1,2]\n[1,2,3]\n[2,3,4]\n[3,4,5]\n[4,5,6]'
>>>
>>> import subprocess
>>> subprocess.check_output(["cut", "-d,", "-f2", "test.txt"])
b'1\n2\n3\n4\n5\n'
>>> subprocess.check_output("cut -d, -f2 test.txt", shell=True)
b'1\n2\n3\n4\n5\n'
>>> subprocess.check_output("cut -d, -f2 test.txt", shell=True, universal_newlines=True)
'1\n2\n3\n4\n5\n'

Zusammenfassung

Im Allgemeinen ist das Schreiben von ShellScript schneller, aber als Referenz habe ich geschrieben, wie Unix-Befehle in Python ausgeführt werden.

Recommended Posts

[Python] Unix-Befehl ausführen (Unterprozess)
Führen Sie Befehle aus Python aus
Führen Sie den Befehl von Python aus
Führen Sie externe Befehle mit Python aus
Führen Sie den Unix-Befehl auf Python aus
So führen Sie einen Befehl mit einem Unterprozess in Python aus
Laden Sie den Befehl von yml mit Python und führen Sie ihn aus
Führen Sie die Python-Datei automatisch aus
Python-Subprozess-Wrapper-Klasse
Grundlegende Python-Befehlsnotizen
Externe Befehlsausführung in Python
Wenn Sie einen UNIX-Befehl in Python ausführen möchten
[Unterprozess] Wenn Sie ein anderes Python-Programm in Python-Code ausführen möchten
Führen Sie das Python-Skript aus der Batchdatei aus
Befehlszeilenargumentverarbeitung (Python docopt)
Drücken Sie einen Befehl in Python (Windows)
Führen Sie die Anweisung [python] exec, eval aus
[Persönliches Memo] Python-Memo für virtuelle Umgebungen
Im Python-Befehl zeigt Python auf Python3.8
Befehl zur Zeitstempelerfassung in einer Unix-Umgebung
Lassen Sie Python die Befehlsausgabe lesen
Führen Sie Python-Code über die C # -GUI aus
Führen Sie Python Script während CodeSys # RunTime aus
Einfache parallele Ausführung mit Python-Unterprozess
Befehl für das aktuelle Verzeichnis Python