运行 Ruby 中的编译 C 文件是否捕获 C 的 printf()?

Does running a compiled C file in Ruby capture C's printf()?

我在 ruby-2.2.2(在 Windows 上,使用 MinGW 和 UnixUtils),我正在编写一个脚本来编译、运行 和 diff .c 文件的输出,我 运行 遇到一个问题,我试图执行最近编译的 C 源文件。

C文件很简单:

#include <stdio.h
int main() {
   printf("hello world.");
   return 0;
}

在我的 ruby 文件中,我 运行 来自 class' 内部方法。

def makeAndTest(filename)
   # code which removes any pre-existing .exe file not included

   compileResult = `gcc -O3 -o %s %s.c` % [filename, filename]
   if (!$?.success?)
        return
   end

   fileCall = `.\%s.exe` % filename
   puts fileCall
end

文件编译得很好,但我进行的实际文件调用没有输出。作为健全性检查,我有 运行 个简单的命令,例如 "ls,",它的输出按 system() 调用的预期打印出来。然而,像 "echo 23132" 这样的命令并没有按预期工作——事实上,Ruby 只是没有为 echo 调用或我的可执行文件打印任何内容。

我已经尝试使用 system()、%x() 和反引号来尝试这些调用,但我似乎永远无法获得任何输出。这让我相信 Ruby 一定会对我的文件 stdout 做 某事 ,对吧?我可以 运行 "echo 23132" 或从 cmd 执行我的文件就好了,但是 ruby 似乎失败了。

如果我检查 $?.success?每次调用后,似乎两个调用都失败了(但简单的 ls 调用成功)。

有人知道这里发生了什么吗? Ruby 如何处理它 运行 文件的标准输出?在我看来,Ruby 能够运行 一个编译的 .exe,所以不明白这里发生了什么。

如果您的调用失败,请尝试通过将其重定向到 stdout 来打印 stderr 的输出

output = `echo 12345 2>&1`