我有一个Perl程序和一个C程序。我想运行Perl程序并捕获C程序的返回值。要清楚:Perl和外部程序
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.
任何想法? 谢谢。
我有一个Perl程序和一个C程序。我想运行Perl程序并捕获C程序的返回值。要清楚:Perl和外部程序
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.
任何想法? 谢谢。
我不知道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 bitshfted返回值(所以0将变成256,1将512 ... 7将是1792年或类似的东西),但我不在乎为什么。
OP正试图捕获程序的输出,而不是它的返回值。这就是反引起的。 – Ether 2010-07-31 16:26:56
@Ether:我不知道,但我认为他只是为了简洁而使用反引号,因为他的问题是“我想运行Perl程序并捕获C程序的返回值”。我猜他只是想要返回值。如果你有任何想法如何捕捉并且只运行一次,我会好奇的。 – 2010-07-31 17:00:11
查看http://stackoverflow.com/questions/109124/how-do-you-capture-stderr-stdout-and-the-exit-code-all-at-once-in-perl – daotoad 2010-07-31 17:19:40
您的C程序不打印回车符,因此您可能会看到行缓冲问题。
试试这个:
printf("100\n");
系统()将返回指示你的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这样的模块,它具有您可能需要的其他功能。
对于你崇拜的任何神的爱,请告诉我们'a.out'不是你的C源文件:-)当你从命令行运行'a.out'时会发生什么? – paxdiablo 2010-07-31 14:07:36
我敢打赌它应该是'.a.out',因为'。'通常不在PATH中。 – Borealid 2010-07-31 14:14:09
'a.out'是已编译的C程序,我也尝试'./a.out'。 – user397232 2010-07-31 14:37:06