我有一個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