1

この質問はPython に関連しています: print ステートメントと subprocess.call() 出力が同期していないのはなぜですか? しかし、私の特定の状況では解決策が機能しません。最初にテストスイートの名前を出力し、次に特定のテストの名前を出力するリストを反復処理する for ループを持ち、その後にテストを実行するためのサブプロセス呼び出しを行う、Python で自動化テストプロセスを達成しようとしています。テストが終了したことを示す print ステートメントで終了します。最後に、これがテスト スイート名の末尾であることを示すステートメントを出力します。

つまり、=========テストスイートの開始: =========

---------テスト開始: ----------

テストを実行するためのサブプロセス呼び出し

---------テスト終了: ------------

テストのために繰り返す

=========エンドテストスイート: ==========

私の現在のコードは正常に動作しますが、その出力をファイルにリダイレクトすると、すべての印刷ステートメントが一番下に置かれます。他の質問のソリューションを使用すると、まったく逆になり、最初にすべての印刷ステートメントを出力してから、テストを実行します。sys.stdout.flush() を使用して、バッファリングをオフにしようとしましたが、どちらも同じことがわかりました。出力をリダイレクトしたり、ファイルに書き込んだりするときに、すべてを実行/コード内にあるとおりに正確に印刷するにはどうすればよいですか??

4

1 に答える 1

1

このような問題を解決する一般的な方法は、Python プログラムで出力をキャプチャし、出力したいときに出力することです。Popen

>>> def do_ls():
...     print "I'm about to ls"
...     ls = subprocess.Popen('ls', stdout=subprocess.PIPE)
...     output = ls.communicate()[0] #wait for the process to finish, capture stdout
...     print 'ls output:'
...     print output
...     print 'done.'

いくつかのコードを投稿すると、テストのためにこれをより具体的に行う方法を示すことができます

于 2012-08-09T22:25:26.203 に答える