Windowsでこれを行うのがなぜそれほど難しいのかわかりません。
他のスクリプトを実行する一連のコマンドプロンプトウィンドウを生成したいと思います。これが必要な理由は、各スクリプトからのすべての出力をきれいに表示できるようにするためです(メインウィンドウにスレッド/サブプロセスだけがある場合、すべての出力を正しく表示できません)。また、出力はログファイルでは実際には機能しないプログレスバーを表示するためのものであるため、ログに記録したくありません。
したがって、要件の個々の部分は機能しますが、一緒には機能しません。
os.system("start cmd /c {command here}") # Launches in new command prompt, closes when done
ただし、OSシステムでは、コマンドが終了するまで待機できません(startは実際のコマンドであるため、2番目に新しいコマンドプロンプトを開いて「完了」します)
同様に私が試してみると:
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)
では、どうすればこれを行うことができますか?解決策はプロセスグループを使用することかもしれないとどこかで読んだのですが、それはUNIXだけです....またはそのようなもの
または、すべてのサブプロセスからの出力を1つのウィンドウに表示するための適切な方法がある場合は、新しいコマンドプロンプトを開く必要はなく、スレッドを使用するだけで済みます。それも機能しますが、4つのスレッドが何かをダウンロードしてプログレスバーを表示したり、他の情報を出力したりすると、読み取り可能な方法でそれを表示する方法がわかりません(また、すべてのスレッドが衝突しないようにする必要があります)お互い)。
PS:これはWindowsVistaです。PPS:できれば、Windows、Linux、Macで動作するソリューションが欲しいです。今は、Windowsに焦点を当てていますが、3つすべてで動作するソリューションが欲しいのですが、Windowsが最も厄介です。OSの適切なコマンドを「startcmd/c」に置き換えます。