Running C++ program from ruby
如何从Ruby脚本运行C++程序?
假设Ruby脚本生成一个名为"Hello .txt"的文件,我想运行一个C++程序来获取Helo.txt文件,使用它并编写另一个文件,名为"Realth.txt",Ruby脚本继续读取RESULT.TXT文件。
例如,在Linux shell中,我编写g++ hello.c -c hello -o hello来接收"result.txt"文件。
有没有一种方法可以从Ruby程序运行shell代码?
- 您的示例命令是编译C++文件(请使用.CPP作为下一次安全性的扩展),而不是运行它,这将在EDCOX1×0之后实现。
你可以像别人说的那样使用system,但是你也应该检查退出值来验证成功或失败。
1
| r = system("g++ hello.c -c hello -o hello") #=> r = true if success, nil if failed |
我发现backticks比system更简洁。
你可以通过以下方式触发C++程序:
您能说明是否需要从当前目录中读取results.txt吗?
如果是这样,你可以使用像contents = IO::readlines './results.txt'这样的东西。
- backticks的行为与system不同;前者从子应用程序返回stdout的结果,而system返回被调用代码的状态。它们不能互换,因为它们的行为方式不同。
- 我同意,但他没有说他在检查响应代码。我建议回退,因为他可以得到结果。TXT明确地从C++程序返回到STDUT,而不是写入文件(可以说是更多的UNIX类),这将在这里很好地工作(避免触摸磁盘,然后再读取之后)。考虑一种不同的方法没有什么害处:—)
- 事后看来,我应该稍微详细点!
- 那么使用Open3.capture2或Open3.popen2会更有意义。如果捕获stderr可能是一个问题,那么这两种方法的3变量非常有用。
- 谢谢分享!我学到了一些新的东西,下次我花大量时间时会记住这些(尽管通常我只是为这类任务生成一个本机扩展模块,因为我现在已经习惯了样板文件)。
您可以使用系统:
1
| system("./hello file.txt") |