运行 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`
我在 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`