2014-02-10 63 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作为服务以获取新的环境变量。这现在正在工作。