我有一个Perl程序和一个C程序。我想运行Perl程序并捕获C程序的返回值。说清楚:
C程序(a.out)
int main()
{
printf("100");
return 100;
}
Perl程序:
print `ls`; #OK
print `a.out`; #No error but it does not print any output.
有什么想法吗? 感谢。
答案 0 :(得分:2)
我不知道perl,但这适用于我的系统,因此无法保证:
#!/usr/bin/perl
print "Running a.out now\n";
$exitCode = system("./a.out");
print "a.out returned:\n";
print $exitCode>>8; print "\n";
由于某种原因system()
返回由8分位的返回值(因此0将变为256,1将是512 ... 7将是1792或类似的东西)但我不关心查找原因。
答案 1 :(得分:1)
您的C程序未打印回车符,因此您可能会看到行缓冲问题。
请改为尝试:
printf("100\n");
答案 2 :(得分:0)
system()将返回一个代码,指示您的C程序返回的内容或它是否被信号终止;假设后者不是这种情况,你可以做
$exitcode = system('a.out');
print "return code was ", $exitcode >> 8, "\n";
如果你还希望捕获输出,你可以使用反引号,代码将在$?变量
$output = `a.out`;
$exitcode = $?;
print "return code was ", $exitcode >> 8, "\n";
print "output was:\n", $output;
您可能希望使用IPC :: Cmd这样的模块,它具有您可能需要的其他几个功能。