コマンドラインアプリケーション用にPythonでテストフレームワークを作成しています。アプリケーションはディレクトリを作成し、現在のディレクトリで他のシェルスクリプトを呼び出し、Stdoutに出力します。
{Python-SubProcess、CommandLine}コンボを{Selenium、Browser}と同等に処理しようとしています。最初のコンポーネントは2番目のコンポーネントで何かを再生し、出力が期待されるかどうかをチェックします。私は次の問題に直面しています
- Popenコンストラクトはコマンドを受け取り、そのコマンドが完了すると戻ります。私が欲しいのは、プロセスへのライブハンドルです。これにより、さらにコマンドと検証を実行し、完了したら最後にシェルを閉じることができます。
- このようなテストが必要なコマンドラインアプリケーションがたくさんあるので、これを実現するためのインフラストラクチャコードを記述しても問題ありません。
これが私が実行しているサンプルコードです
p = subprocess.Popen("/bin/bash", cwd = test_dir)
p.communicate(input = "hostname") --> I expect the hostname to be printed out
p.communicate(input = "time") --> I expect current time to be printed out
しかし、プロセスがハングするか、何か間違ったことをしている可能性があります。また、そのサブプロセスの出力を「取得」して、何かが存在することを表明できるようにするにはどうすればよいですか?