Perl和外部程序

时间:2010-07-31 14:03:26

标签: c perl connection

我有一个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.

有什么想法吗? 感谢。

3 个答案:

答案 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这样的模块,它具有您可能需要的其他几个功能。