如何在另一个C ++程序中运行C ++程序?

时间:2011-07-21 21:49:50

标签: c++ linux

我有一个简单的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!

现在我想写一个c ++程序可以运行这个c ++程序并在没有用户输入的情况下自动播放游戏,然后将其输出到文件或标准输出。

运行它看起来像这样:

./program game r > outputfile

游戏是游戏程序,r用于播放常规风格。

我该怎么做?我需要这个程序的主要原因是我想为更大的程序进行自动测试。

3 个答案:

答案 0 :(得分:6)

您可以使用std::system中的<cstdlib>

std::system("game r > outputfile");

返回值为./program,唯一参数必须为char const *类型。

但是,没有标准的方法来运行程序并为其提供标准输入。根据您的命令行判断,您使用的是popen<stdio.h>应该工作的某些Unix变体:

FILE *sub = popen("game r > outputfile", "w");

然后使用sub函数写入stdio,然后阅读outputfile

(但是对于简单的测试,我建议将程序的核心逻辑实现为一组可以由循环中的自定义主函数运行的函数/类;或者选择您喜欢的脚本语言来处理这种类型事情。)

答案 1 :(得分:1)

这种情况迫切需要一个“脚本”,恕我直言。

Bash,Perl,Python - 你的名字。

最简单的案例:

只需编写一个bash脚本来调用./program game r > outputfile

./program game r < test_input.txt > test_output.txt

对于更高级的方案,您可能需要查看“expect”。

您可能还想查看“STAF”,这可能是“自动化自动化测试”的好方法:

http://staf.sourceforge.net/current/STAFFAQ.htm

答案 2 :(得分:1)

我会更有效地将调用函数添加到主源并让它控制循环,记录和输入输入。它也不需要系统调用或其他魔法来实现。作为游戏程序员,我们让我们的游戏尽可能地帮助调试,而且几乎总是通过内部代码完成,而不是通过外部脚本或系统调用。它也可以更容易地提供可行的输入。