在我的Perl代码中,我使用系统命令来运行脚本。我正在使用Gtk2 :: Perl和Glade来构建UI。我需要将命令的输出不仅捕获到控制台(Capture::Tiny
执行),还要捕获到GUI中的TextView。
system("command");
$stdout = tee{ #This captures the output to the console
system("command");
};
$textbuffer->set_text($stdout); #This does set the TextView with the captured output, but *after* the capture is over.
非常感谢任何帮助。
答案 0 :(得分:4)
如果您尝试“捕获”system
来电的输出,那么我建议最好的方法是使用open
并为您的流程打开文件句柄:
my $pid = open ( my $process_output, '-|', "command" );
然后你可以像文件句柄那样完全阅读$process_output
(请记住,如果没有IO待处理,它会阻止)。
while ( <$process_output> ) {
print;
}
close ( $process_output );
您可以通过system
系统调用“伪造”waitpid
的行为:
waitpid ( $pid, 0 );
这将“阻止”您的主程序,直到系统调用完成。
答案 1 :(得分:2)
system()
无法实现您的目标。 System()
分叉新进程和等待它终止。然后你的程序继续(见manual)。你可以开始一个子流程(执行system()
为你做的任何事情)并阅读这个子流程&#39;标准输出。例如,你可以从这里得到启发:redirecting stdin/stdout from exec'ed process to pipe in Perl