2011-07-21 19 views
5

単純なC++プログラムを使用して、入力を取り込んでいくつかの文字列を出力すると仮定します。この(実際のプログラムははるかに複雑であるが、まだテキストベース)のように:Pythonを使ってC++プログラムを実行してテストする

$ ./game 
$ what kind of game? type r for regular, s for special. 
$ r 
$ choose a number from 1 - 10 
$ 1 
$ no try again 
$ 2 
$ no try again 
$ 5 
$ yes you WIN! 

私は前のPythonを使用していないが、それは、このプログラムを実行するPythonスクリプトを記述することが可能で、それに入力を供給し、出力結果は標準出力に出力されますか?私はhereについてC++を使って実行することについて質問していますが、それは非常に複雑すぎるようです。いくつかのコード例を私に教えてもらうのはすばらしいことでしょう。どんな助けもありがとう。

+0

また、 'expect'(http://en.wikipedia.org/wiki/Expect)を検討することもできます。 – aschepler

答えて

3

pexpectを使用してください。

ファイル記述子がTTYでない場合(isatty呼び出しによる)、親プロセスと子プロセスの標準ライブラリ機能がI/Oをより積極的にバッファリングする傾向があるため、標準stdin/stdoutパイピングは通常動作しません。明らかに、あなたはあなたがそのコードを所有しているので、親でこれを修正することができます。適切なポイントでフラッシュするだけです。しかし、多くの場合、子プロセスはあなたが所有していない既存のコードを実行しています。 pexpectモジュールは、子プロセスに擬似ttyを送ります。この擬似ttyは、子プロセスをコンソールに話していると思うように騙します。これはxtermやrxvtのようなGUI端末が使うのと同じトリックです。

1

Cramは、コマンドラインオプションをテストするためのPythonツールです。

0

これまでのところ、expectのPythonバージョンを含む私のテストフレームワークを使用することができます。オリジナルのexpectプログラムでは、それと同様に対話型プログラムで「会話」することができます。しかし、このフレームワークには、代わりに使用できるPythonのexpect.pyモジュールが含まれています。

モジュールは、プロセスサブパッケージであるhttp://code.google.com/p/pycopia/

を参照してください。

また、pexpectを使用することもできますが、私はそれを気に入らなかったので自分自身で書きました。

関連する問題