繁体   English   中英

在Ruby中运行已编译的C文件会捕获C的printf()吗?

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

我正在使用ruby-2.2.2(在Windows上,使用MinGW和UnixUtils),并且正在编写一个脚本,该脚本将编译,运行和比较.c文件的输出,并且遇到了我尝试尝试的问题执行最近编译的C源文件。

C文件很简单:

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

在我的ruby文件中,我从类的内部方法运行。

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()和反引号来尝试这些调用,但是我似乎永远都无法获得任何输出。 这已经导致我相信,红宝石必须做一些与我的文件标准输出,对不对? 我可以运行“ echo 23132”或从cmd执行文件,但是ruby似乎失败了。

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

有谁知道这里可能会发生什么? Ruby如何处理它运行的文件的标准输出? 在我看来,Ruby能够运行已编译的.exe,因此不了解此处可能会发生什么。

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

output = `echo 12345 2>&1`

暂无
暂无

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

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