繁体   English   中英

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

[英]How to run a C++ program in another C++ program?

我有一个简单的 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++ 程序并在没有用户输入的情况下自动玩游戏,然后将其输出到文件或标准 output。

运行它看起来像这样:

./program game r > outputfile

game 是游戏程序,r 用于玩常规风格。

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

您可以使用来自<cstdlib>std::system

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

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

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

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

然后使用stdio函数写入sub并随后读取outputfile

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM