Ich habe mehrere Codes in Python geschrieben und möchte, dass ein Programm den Start von ihnen steuert. Es gibt solche Zeiten. Dieses Mal werde ich vorstellen, wie Sie ein anderes Programm ausführen, das Sie asynchron aus den Programmen heraus starten möchten.
Windows10 python 3.7.6 anaconda 20.02
import subprocess
command = [python (Datei).py (Streit)]
proc = subprocess.Popen(command) #->Befehl wird ausgeführt(Warten Sie nicht bis zum Ende der Verarbeitung)
result = proc.communicate() #->Warten Sie bis zum Ende
Es ist ein Code ohne jede Wendung, aber ich habe zwei Dateien als Test erstellt, um zu sehen, ob er vorerst funktioniert. call.py dient zur Ausgabe des angegebenen Arguments. Listen Sie die Befehle auf, indem Sie sie in durch Leerzeichen getrennte "" einschließen.
call.py
import sys
from time import sleep
sleep(1) #Schlaf für eine Sekunde(Um zu überprüfen, ob es asynchron ist)
args = sys.argv[1]
print(args)
main.py
import subprocess
command = ["python","call.py,"Ich wurde angerufen!"]
proc = subprocess.Popen(command)
print("Berufung")
proc.communicate()
** Ausführungsergebnis **
Da der "Aufruf" von main zuerst gedruckt wird, Sie können sehen, dass ** nicht auf den von subprocess.Popen () ** ausgeführten Prozess wartet.
Wenn ich es mit subprocess.Popen () aufrufe, mache ich mir Sorgen um ** Verarbeitungszeit **. Rufen wir call_2.py auf, das die folgende Verarbeitung für ein 1280 x 800-Bild ausführt.
call_2.py
from time import time
import numpy as np
import cv2
start = time()
img = cv2.imread("sample.png ")
resize = cv2.resize(img,dsize=None,fx=0.5,fy=0.5) #resize
kernel = np.ones((5,5),np.uint8)
erosion = cv2.erode(resize,kernel) #erode
cv2.imwrite("resize.png ",erosion)
end = time() - start
print(end)
Jetzt, wenn Sie es mit Python main.py ausführen und wenn Sie es mit Python call_2.py ausführen Ich habe die Zeit des zu druckenden Endes verglichen. Ich habe mehrmals versucht, die Konsole zu betreten und zu verlassen. ** Die Verarbeitungszeit war ungefähr gleich, unabhängig davon, ob sie sich im Cache befand oder nicht **. (Die tatsächliche Anzahl wird weggelassen, da sie von der Ausführungsumgebung abhängt.)
Ich habe Ihnen gezeigt, wie Sie eine andere py-Datei mit subprocess.Popen () ausführen. In der Windows-Umgebung gab es keinen Unterschied in der Verarbeitungsgeschwindigkeit. Ich bin froh, dass es keinen Geschwindigkeitsengpass gibt. Es kann sich jedoch ändern, wenn die Umgebung Linux ist.
Wir hoffen, Sie finden dies hilfreich.
** Bitte beachten Sie auch die folgende Seite ** Offizielle Dokumentation (Python 3.8.5) Wenn die Datei, die Sie ausführen möchten, in einem anderen Verzeichnis vorhanden ist Shell-Befehl von Python ausführen! Zusammenfassung, wie ein Unterprozess mit einem Unterprozess ausgeführt wird Linux-Befehl von Python mit Unterprozess ausführen
** Ein Buch, das hilfreich zu sein scheint (ich möchte es nur lesen ...) ** Expert Python Programming Revised 2nd Edition
Recommended Posts