Python: Starten Sie eine neue Eingabeaufforderung unter Windows und warten Sie, bis diese beendet ist

Ich verstehe nicht, warum dies unter Windows so schwierig ist.

Ich möchte eine Reihe von Eingabeaufforderungsfenstern erzeugen, in denen andere Skripts ausgeführt werden. Der Grund, warum ich das möchte, ist, dass ich die gesamte Ausgabe jedes Skripts ordentlich sehen kann (wenn ich nur Threads / Unterprozesse im Hauptfenster habe, kann ich die gesamte Ausgabe nicht richtig anzeigen). Ich möchte die Ausgabe auch nicht protokollieren, da sie hauptsächlich zum Anzeigen von Fortschrittsbalken dient, die mit Protokolldateien nicht wirklich funktionieren.

So funktionieren einzelne Teile meiner Anforderungen, aber nicht zusammen:

os.system("start cmd /c {command here}")     # Launches in new command prompt, closes when done

Das Betriebssystem lässt mich jedoch nicht warten, bis der Befehl beendet ist.

Ebenso, wenn ich versuche:

p = subprocess.Popen(["start", "cmd", "/k", "{command here}], shell = True) # Needs to be shell since start isn't an executable, its a shell cmd
p.wait()    # I can wait until finished (although it too finishes after start finishes)

Wie mache ich das? Ich habe irgendwo gelesen, dass eine Lösung darin bestehen könnte, processgroup zu verwenden, aber es ist nur Unix ... oder so ähnlich

Oder wenn Sie die Ausgabe aller Unterprozesse auf übersichtliche Weise in einem einzigen Fenster anzeigen können, muss ich keine neue Eingabeaufforderung öffnen und kann einfach Threads verwenden. Das funktioniert auch, aber wenn ich zum Beispiel 4 Threads habe, die etwas herunterladen und einen Fortschrittsbalken anzeigen sowie andere Informationen ausgeben, weiß ich nicht, wie ich das so anzeigen kann, dass es lesbar ist (und nicht, dass alle mit diesen kollidieren) gegenseitig).

PS: Dies ist unter Windows Vista. PPS: Ich hätte gerne eine Lösung, die unter Windows, Linux und Mac funktioniert. Ich konzentriere mich vorerst auf Windows, aber ich hätte gerne eine Lösung, die für alle drei funktioniert, und ich weiß, dass Windows die heikelste ist. Ich würde nur "the start cmd / c" für den entsprechenden OS-Befehl einsetzen.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage