2014-02-10 98 views
0

請注意下面的子例程應該打印$ sting,其中包含由另一個Java程序生成的一堆信息。問題是$ string最終爲空,這表明命令甚至沒有運行。當我在IIS之外運行這個腳本時,我實際上得到了我期望的輸出。有任何想法嗎?從IIS上運行的PERL腳本獲取輸出的問題

sub getStatus{ 
my $info = shift; 
my $env = lc($info->{'enviroment'}); 
my ($host,$port) = split("\-", $env); 
chomp ($host, $port); 
my $cmd = "java ./GetStatus $host $port"; 
my $string = `$cmd`; 

print <<ENDOFTEXT; 
HTTP/1.0 200 OK 
Content-Type: text/html 

<HTML> 
<HEAD><TITLE>Cache Status</TITLE></HEAD> 
<BODY> 
<H4>Cache Status</H4> 
$string 
</BODY> 
</HTML> 
ENDOFTEXT 

} 
+0

嘗試使用'GetStatus'的完整路徑。另外,'環境'。 – RobEarl

+0

我試着定義GetStatus的完整路徑,字符串仍然是空的。我幾乎可以肯定,這與IIS設置有關,因爲從命令提示符運行此腳本會給我預期的輸出,但我沒有看到任何影響此操作的IIS。 – syphon228

+0

Cab你'系統()'一些其他的命令,通過IIS寫入到標準輸出成功?我會懷疑它與已啓動的程序STDOUT混合在一起。你可以試試'Expect'模塊,但我懷疑這個變化很大。我想最糟糕的情況是讓你的Java程序把它的輸出打印到你的perl腳本後面讀取的臨時文本文件中。當然這需要一些時間。 – DeVadder

回答

0

我發現了這個問題。我看了一下$ ENV {PATH},發現即使更新了系統變量並重新啓動了IIS站點,也沒有包含java的路徑。不幸的是,您需要重新啓動IIS作爲服務以獲取新的環境變量。這現在正在工作。