Dieses Mal werde ich erklären, wie man Systembefehle in Python ausführt, die jeder liebt, und die Ergebnisse ausgeben. Es wird als Systembefehl bezeichnet, aber es ist eine Möglichkeit, alle Befehle auszuführen, die auf dem Terminal in Python verwendet werden können.
So erhalten Sie nur Download und Upload von Speedtest json mit jq https://qiita.com/Bob_Alice/items/83c0686f56012b300780
Zunächst können Sie Systembefehle mithilfe der Python-Bibliothek "subprocess" einfach ausführen.
In Python ist es sehr einfach zu bedienen
result = subprocess.run(['Befehl','そのBefehlの引数'], stdout=subprocess.PIPE)
Dann
result.returncode
Der Statuscode (Erfolg oder Misserfolg) des Befehls wird in eingegeben
result.stdout
Das Ergebnis der Standardausgabe wird zugewiesen.
Wenn es mehrere Argumente gibt, scheint es verschiedene Möglichkeiten zu geben, aber es scheint ein Sicherheitsproblem zu geben. Dieses Mal wurden der zu verwendende Befehl und sein Argument für meine Verwendung entschieden, daher habe ich ein Shell-Skript erstellt, um ihn auszuführen. Shell-Skripte sind nicht schwierig. Speichern Sie einfach eine Datei mit den Befehlen und Argumenten, die Sie mit der Erweiterung .sh verwenden möchten. Dieses Mal bestand der Zweck darin, den folgenden Befehl auszuführen, der einen bestimmten Wert mit dem Befehl jq aus der vorbereiteten json-Datei ausgibt.
cat result.json | jq ".download.bandwidth"
Daher habe ich diesen Befehl in eine Datei mit dem Namen "get_download_bandwidth_from_result.sh" geschrieben und gespeichert.
Dann wurde es der folgende Python-Code.
import subprocess
result = subprocess.run(['sh','get_download_bandwidth_from_result.sh'], stdout=subprocess.PIPE)
print(result.returncode)
print(result.stdout)
Ausgabeergebnis
b'33052461\n'
Wenn die Standardausgabe jedoch per Unterprozess empfangen wird, handelt es sich um ein codiertes Byte. Sie müssen es dekodieren, damit es normal aussieht.
Tiefer über Unterprozess (3 Serien, aktualisierte Version) https://qiita.com/HidKamiya/items/e192a55371a2961ca8a4
Deshalb
result.stdout.decode().strip().split('\n')
Auf diese Weise konnte ich entschlüsseln.
Da das Decourse-Ergebnis jedoch als Liste gespeichert ist, muss angegeben werden, dass es die erste (0.) Variable in der Liste ist, um es als einzelne Variable zu behandeln.
output = result.stdout.decode().strip().split('\n')[0]
Auf diese Weise wird die erste Zahl nach dem Ablauf in die variable Ausgabe eingegeben.
Das Endergebnis ist der folgende Python-Code.
import subprocess
result = subprocess.run(['sh','get_download_bandwidth_from_result.sh'], stdout=subprocess.PIPE)
print(result.returncode)
print(result.stdout)
print(result.stdout.decode().strip().split('\n'))
Dies ist perfekt. Das Ende.
Beachten Sie, dass subprocess.run () nur mit Python 3.5 oder höher verwendet werden kann https://ja.ojit.com/so/python/232121
Recommended Posts