为什么IPC::Run3不能捕获Apache环境下的任何标准输出


%use IPC::Run3;
%my $a;
%run3 ['echo','hello'],undef,$a;
<% $a %>
当我从独立脚本中使用Mason时,

上面的mason代码工作得非常好,如HTML::Mason::Admin所述。不幸的是,当perl_mode运行时,$a是一个空字符串。下面是我的httpd.conf

 Alias /mason_book /home/charlse/f/books/mason_book
 <Location /mason_book>
    SetHandler perl-script
    AddHandler perl-script .mas
    PerlHandler HTML::Mason::ApacheHandler
    PerlAddVar  MasonCompRoot  "mason_book => /home/charles/f/books/mason_book"
 </Location>
 <Directory "/home/chunywan/f/books/mason_book">
    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
 </Directory>

 %use IPC::Run qw(run timeout);
 %my @cmd=qw(echo hello world);
 %my ($in,$out,$err);
 %run(@cmd, $in, $out, $err) or die "cat: $?";
 <pre>
   out <% $out %>
 </pre>

我只是尝试IPC::Run,它在独立模式和mod_perl模式下都能很好地工作。看来我必须更新我所有的源代码使用IPC::Run而不是IPC::Run3

我认为解决方案是暂时重新打开STDIN/STDOUT,然后在命令完成后关闭它。

use IPC::Run3;
my $a;
#save off existing stdin/out
my ($save_stdin,$save_stdout);
open $save_stdin, '>&STDIN';
open $save_stdout, '>&STDOUT';
#open it again as the "normal things"
open STDIN, '>&=0';
open STDOUT, '>&=1';
run3 ['echo','hello'],undef,$a;
#clean up after yourself
close(STDIN);
close(STDOUT);
open STDIN, '>&', $save_stdin;
open STDOUT, '>&', $save_stdout;

我在IPC::Open3中遇到了同样的问题,并在这里解决了:https://stackoverflow.com/a/24311232/312208

相关内容

  • 没有找到相关文章

最新更新