Umgebung: OSX Yosemite Bash Python3.5.0
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.
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'
Im Allgemeinen ist das Schreiben von ShellScript schneller, aber als Referenz habe ich geschrieben, wie Unix-Befehle in Python ausgeführt werden.
Recommended Posts