使用python运行C ++程序并测试它

时间:2011-07-21 22:29:19

标签: 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 ++运行它的问题,但它似乎太复杂了。你可以指导我一些代码示例,这真是太棒了。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:3)

使用pexpect

正常的stdin / stdout管道通常不起作用,因为当文件描述符不是TTY时,父和子进程中的标准库工具倾向于更积极地缓冲I / O(通过isatty呼叫)。显然,您可以在父级中修复此问题,因为您拥有该代码;只需在适当的位置调用flush。但是,子进程通常运行一些您不拥有的预先存在的代码。 pexpect模块为子进程提供伪tty,这会欺骗孩子认为它正在与控制台通信。这与xterm和rxvt等GUI终端使用的技巧相同。

答案 1 :(得分:1)

您可能对Cram感兴趣,{{3}}是一个用于测试命令行选项的Python工具。

答案 2 :(得分:0)

如果你做到了,你可以使用我的测试框架,其中包含expect的Python版本。原始expect程序允许您与交互式程序“交谈”。但是这个框架包含一个Python expect.py模块,你可以使用它。

请参阅http://code.google.com/p/pycopia/

模块位于进程子包中。

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