2011-07-21 54 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脚本来运行这个程序,喂它输入和输出结果标准输出?我问了关于使用C++运行它的问题here,但它看起来太复杂了。如果你能指导我看一些代码示例,那将会非常棒。任何帮助,将不胜感激。

+0

你可能还想考虑'expect'(http://en.wikipedia.org/wiki/Expect) – aschepler

回答

3

使用pexpect

由于当文件描述符不是TTY(通过isatty调用)时,父进程和子进程中的标准库工具倾向于更积极地缓冲I/O,所以标准stdin/stdout管道通常不起作用。显然,你可以在父代中解决这个问题,因为你拥有该代码;只需在适当的地方打电话即可。但是,子进程通常运行一些您不拥有的预先存在的代码。 pexpect模块为子进程提供一个伪tty,它欺骗孩子认为它正在与控制台交谈。这与xterm和rxvt等GUI终端使用的技巧是一样的。

1

您可能感兴趣Cram,它是测试命令行选项的Python工具。

0

如果您愿意,可以使用我的测试框架,其中包含Python版本expect。原来的expect程序可以让你像交互式程序那样“交谈”。但是这个框架包含一个Python expect.py模块,您可以使用它。

参见http://code.google.com/p/pycopia/

该模块是在这个过程中的子包。

你也可以用pexpect,但是我写了我自己的,因为我不喜欢那个。