如何在Perl中捕获pkgrm的输出?

时间:2009-09-30 06:13:21

标签: perl

我想在Solaris中卸载一个包,比如NewPackage。为此,我使用命令:

pkgrm NewPackage

它将显示STDOUT中的所有步骤,最后它将显示已成功卸载软件包的消息。

如果我想在Perl程序中卸载相同的包,我该如何将STDOUT消息重定向到一个文件,以便在执行结束时我可以转到该文件并验证该文件。目前,我尝试了以下命令但没有成功:

open (FD, "/usr/tmp/result.txt");
$input1 = <FD>;
$input2 = <FD>;
system("pkgrm NewPackage" < $input1);

但不知道如何传递第二个输入。

请告知如何继续。

2 个答案:

答案 0 :(得分:2)

一般来说:

  • 使用strictwarnings pragma
  • 使用带有词法句柄的3参数打开
  • 在继续编写脚本之前测试您的公开呼叫是否成功
  • 如果您为变量名称编号($input1, $input2),请使用数组(@inputs
  • 如果要将变量名称用作变量,请使用哈希
  • 如有疑问,RTFM。由于TFM很大并且一开始很难找到,所以您可能需要阅读How To RTFM
  • The FAQs也非常方便。有a whole section on system interactionanother on file manipulation
  • 当您需要一个函数来执行一些随机任务时,请查看perlfunc中的functions by category section

无论如何,你需要更具体地定义你想要做的事情。

是否要运行命令并将其STDOUT转储到文件中:

`pkgrm $package > $outfile`;

或者可以将结果附加到现有日志中:

`pkgrm $package >> $outfile`;

或者您想要了解结果,看看您的计划中发生了什么:

open( my $result_fh, '>', $outfile ) or die "can't open logfile - $!\n";
my $output = `pkgrm $package`;
if( $oupt =~ /happiness/) {
   print $result_fh "hooray!\n", $output;
}
else {

   print $result_fh "uh oh\n", $output;
} 

或者您需要监控标准错误吗?

或者STDERR和STDOUT是否应合并为一个流?

对于这些案例以及更多see perlfaq8

答案 1 :(得分:0)