2012-07-23 56 views
15

なぜWindowsでこれを行うのは難しいのか分かりません。Python:Windowsで新しいコマンドプロンプトを起動し、終了/終了を待ちます

他のスクリプトを実行する一連のコマンドプロンプトウィンドウを生成したいとします。なぜなら、私はこれを望んでいるので、各スクリプトのすべての出力をきれいに見ることができます(メインウィンドウのスレッド/サブプロセスであれば、すべての出力を適切に表示できません)。また、出力ファイルをログに記録したくないのは、主にログファイルでは機能しないプログレスバーを表示するためです。

だから私の要件の個々の部分が一緒に動作しますが、ない:スタートは実際のコマンドであるため、

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

しかし、OSのシステムは、(私はコマンドが終了するまで待つ秒をさせないであろうことが開きますだから、

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のみ....またはそのようなものだ

あるいは、すべてのサブプロセスからの出力を単一のウィンドウに表示するうえで、新しいコマンドプロンプトを開く必要がなく、単にスレッドを使用できます。それも動作しますが、もし私が何かをダウンロードしてプログレスバーを表示するだけでなく、他の情報を出力するような4つのスレッドがあるとすれば、それを表示する方法はわかりません。お互い)。

PS:これはWindows Vista上です。 PPS:私は、Windows、Linux、Macで動作するソリューションが好きなのは好きですが、今はWindowsに重点を置いていますが、3つすべてでうまくいくソリューションがほしいと思っています。私は、OSの適切なコマンドの代わりに "start cmd/c"を使用します。およそ

os.system("cmd /c {command here}") 

あるいは

os.system("{command here}") 

それがスタートですどのように

+0

はあなたのコマンドとして「CMD」を使用して対「スタート」を使用している理由はありますか? – Joe

+0

新しいコマンドプロンプトを開くのが見つかった唯一の方法です。別の方法がある場合は – robev

答えて

1

は別のセッションを起動する代わりにPythonプログラムが実行されているものと同じものを使用しているものを命じます。あなたが必要なものを私の前の回答にコメントを読め

+0

新しいコマンドプロンプトウィンドウが開始されず、現在のウィンドウで実行されます – robev

4

startコマンドに/ WAITを渡して、終了を待つことができます。私が使用する新しいコマンドプロンプトウィンドウを開くには

2

os.system("start /B start cmd.exe @cmd /k mycommand...") 
関連する問題