Python: Starten Sie die neue Eingabeaufforderung unter Windows und warten Sie, bis die Eingabe abgeschlossen ist

Ich verstehe nicht, warum es so schwer ist, dies zu tun in Windows.

Ich will, um zu laichen eine Reihe von Eingabeaufforderung von windows, die andere Skripts ausführen. Der Grund, warum ich wollen, das ist, damit ich alles sehen kann die Ausgabe von jedem Skript ordentlich (wenn ich Sie bisher nur threads/Teilprozesse im Hauptfenster kann ich nicht alle korrekt ausgegeben). Ich will auch nicht zu Protokoll der Ausgabe, weil es meist für die Anzeige von Fortschrittsbalken, die nicht wirklich Arbeit mit den log-Dateien.

So dass die einzelnen Teile der meine Anforderungen funktionieren, aber nicht zusammen:

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

Jedoch, os-system wird nicht lassen Sie mich warten Sie, bis der Befehl abgeschlossen ist (seit dem start ist der eigentliche Befehl, der zweite öffnet die neue Eingabeaufforderung, es ist "fertig")

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)

So, wie mache ich das? Ich habe irgendwo gelesen, dass eine Lösung sein könnte, zu verwenden processgroup aber es ist nur unter unix....oder so etwas wie, dass

Ist oder wenn Sie eine nette Art der Darstellung der Ausgaben aller Teilprozesse in einem einzigen Fenster, dann brauche ich mich nicht öffnen Sie eine neue Eingabeaufforderung, und verwenden einfach threads. Das funktioniert auch, aber wenn ich sagen wir 4 threads etwas herunterladen und die Anzeige einer progress bar sowie die Ausgabe von anderen Informationen, die ich nicht wissen, wie um Sie anzuzeigen, in einer Weise, die gelesen werden können (ebenso wie die Vermeidung von Ihnen allen miteinander kollidieren).

PS: Dies ist auf Windows Vista.
PPS: ich würde am Liebsten eine Lösung, die funktioniert auf Windows, Linux und Mac, ich konzentriere mich auf die Windows für jetzt, aber ich möchte eine Lösung, die funktioniert für alle drei, und ich weiß, Windows ist den meisten pingelig. Würde ich ersetzen Sie einfach "start cmd /c" für das Betriebssystem entsprechenden Befehl.

Kommentar zu dem Problem
Gibt es einen Grund, Sie mit 'start' vs mit " cmd " als Befehl? Kommentarautor: Joe
Einzige Möglichkeit die ich gefunden habe, um öffnen Sie eine neue Eingabeaufforderung, wenn es einen anderen Weg gibt, dass ist in Ordnung Kommentarautor: robev

InformationsquelleAutor der Frage robev | 2012-07-23

Schreibe einen Kommentar