假设我有一个简单的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 :(得分: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,但我写了自己的,因为我不喜欢那个。