我有一个Perl脚本,它运行一个外部可执行文件.该可执行文件运行一段时间(有时是秒,有时是一小时),可以将文本吐出到STDOUT和STDERR以及退出代码,这些都是必需的.下面的代码演示了第一个成功的外部可执行文件运行(带有一行的小bash脚本 - 注释),然后出现状态不佳(例如gs - ghostscript).我希望外部可执行文件将其STDOUT提供给Perl脚本,以便在外部仍在执行时记录到日志文件(也用于其他内容)之前进行评估,过滤,格式化等.STDERR也可以以同样的方式工作.此脚本可用于记录STDOUT中的所有内容,但仅在可执行文件完成后才能记录.并且STDERR只是直接记录,没有评估等.我没有可能安装任何额外的Perl部件,模块等.
我如何让Perl脚本从可执行文件中获取每一行(STDOUT + STDERR),同时将其吐出(不仅仅是在结尾)以及出于其他目的的退出代码?
#!/usr/bin/perl
@array_executable_and_parameters = "/home/username/perl/myexecutable.sh" ; #ls -lh ; for i in {1..5}; do echo X; sleep 1; done
@array_executable_and_parameters2= "gs aaa" ;
my $line;
chdir("/home/username/perl/");
$logFileName = "logfileforsomespecificinput.log";
open(LOGHANDLE, ">>$logFileName" );
open (STDERR, '>>', $logFileName); #Prints to logfile directly
#open (STDERR, '>>', <STDOUT>); #Prints to own STDOUT (screen or mailfile)
print LOGHANDLE "--------------OK run\n";
open CMD, '-|', @array_executable_and_parameters or die $@;
while (defined($line = <CMD>)) { #Logs all at once at end …Run Code Online (Sandbox Code Playgroud)