Python: Uruchom nowy wiersz polecenia w systemie Windows i poczekaj na zakończenie / wyjście

Nie rozumiem, dlaczego tak trudno jest to zrobić w systemie Windows.

Chcę wywołać kilka okien wiersza poleceń, które będą uruchamiać inne skrypty. Powód, dla którego chcę tego zrobić, jest taki, że mogę starannie zobaczyć wszystkie wyjścia z każdego skryptu (jeśli mam je tylko w wątkach / podprocesach w oknie głównym, nie mogę poprawnie wyświetlić wszystkich wyników). Nie chcę też rejestrować danych wyjściowych, ponieważ służy głównie do wyświetlania pasków postępu, które nie działają z plikami dziennika.

Tak więc poszczególne części moich wymagań działają, ale nie razem:

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

Jednak system os nie pozwoli mi czekać, aż polecenie zakończy się (ponieważ start jest właściwym poleceniem, drugi otwiera nowy wiersz polecenia, który jest „ukończony”)

Podobnie jeśli spróbuję:

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)

Jak mam to zrobić? Czytałem gdzieś, że rozwiązaniem może być użycie grupy procesowej, ale jest to tylko unix .... lub coś w tym stylu

Lub jeśli masz dobry sposób wyświetlania wyników ze wszystkich podprocesów w jednym oknie, nie muszę otwierać nowego wiersza poleceń i mogę po prostu używać wątków. To też działa, ale jeśli powiem, że 4 wątki pobierają coś i wyświetlają pasek postępu, a także wyprowadzają inne informacje, nie wiem, jak wyświetlić to w sposób, który można odczytać (a także uniknąć ich zderzenia wzajemnie).

PS: To jest w systemie Windows Vista. PPS: Preferowałbym rozwiązanie działające na systemach Windows, Linux i Mac, na razie skupiam się na systemie Windows, ale chciałbym rozwiązanie, które działa dla wszystkich trzech i wiem, że Windows jest najbardziej wybredny. Chciałbym po prostu zastąpić „start cmd / c” dla odpowiedniej komendy systemu operacyjnego.

questionAnswers(4)

yourAnswerToTheQuestion