2016-11-09 2 views
2

新しいコマンドプロンプトを起動し、ユーザーが定義したカスタムコマンドを実行するプログラムを作成しようとしています。ここに私のコードの抜粋です:pythonの新しいコマンドプロンプトでcommandの出力を取得する

if(fileName == "" or className == ""): 
    tkMessageBox.showinfo("Error", "Please select a test class/test!") 
else: 
    command = ["start","/w","cmd","/c","ctetest"] 
    if(verbose.get()): 
     command.append("-v") 
    if(xml.get()): 
     command.append("-x") 
    if(version.get()): 
     command.append("-V") 
    if(output.get()): 
     command.append("-o") 
    command.append("RegressionTest/" + folderName) 
    command.append(fileName + "." + className + "." + methodName) 
    processOutput = subprocess.check_output(command, shell = True) 
    print processOutput 

私は新しいコマンドプロンプトでコマンドを実行し、それが終了したときにそれを閉じることができるしていますが、問題は、私は私のカスタムコマンドからの出力を取得しておりませんということですが、代わりに、私は何もない "スタート"コマンドからの出力を得ています。私のカスタムコマンドから出力を得る方法はありますか?前もって感謝します!

+0

あなたが本当に新しいCMDウィンドウを開いて、そこにコマンドを実行する必要がありますか?このコマンドを直接実行し、何らかの出力が何度も繰り返されているかどうか確認できます。 – ForceBru

+0

@ForceBruそうですね、これらのコマンドを複数実行し、実行中にそれらを監視したいと思うかもしれません。私はこれを直接実行するとシンプルになることに同意しますが、時には出力がクリップされ、チャンクが失われる可能性があるので、実際には面倒です。 – Ted

答えて

0

複数のCMDウィンドウは必要ありません。ただ1つあります。

複数のコマンドを一度に実行する場合は、マルチスレッドを使用します。

返されたデータが切り捨てられる恐れがある場合は、ファイルに出力するだけです。

同様:

if(fileName == "" or className == ""): 
    tkMessageBox.showinfo("Error", "Please select a test class/test!") 
else: 
    command = ["ctetest"] 
    if(verbose.get()): 
     command.append("-v") 
    if(xml.get()): 
     command.append("-x") 
    if(version.get()): 
     command.append("-V") 
    if(output.get()): 
     command.append("-o") 
    command.append("RegressionTest/" + folderName) 
    command.append(fileName + "." + className + "." + methodName) 
    command.append('> %s_test_%s_%s_%s.txt' % (time.time(), fileName, className, methodName)) 
    subprocess.call(command, shell = True) 
+0

しかし、新しいウィンドウが欲しいと思えば、実際に出力を得る方法はありませんか?これは最終的にテキストファイルに出力する私の次のステップです。しかし今のところ私のカスタムコマンドはテストスクリプトを実行するために使われ、このテストスクリプトの中で私はサーバに複数のコマンドを送り、私が返すことができるレスポンスを監視します。場合によっては、サーバーがしばらく時間がかかるか、応答しないことさえあります。別のウィンドウが必要なので、サーバーの動作/応答時間をきれいに監視することができます。 – Ted

+0

新しいウィンドウを開いたときにどのように出力を取り出すことができないのか、それがファイル(またはデータベース)に書き込まれていないのであれば、本当にわかりません。 また、マルチスレッドを使用すると、各コマンドの出力をcsvファイルに書き込むことができます(テスト対象のクラス/メソッド、時間、最終的なエラー(タイムアウト、サーバー到達不可...)そのcsvドキュメント、あなたは何が起こっているかを完全に監視することができます。 –

関連する問題