2016-04-05 7 views
0

私がやっていることは、あたかもそれがかなりシンプルであるかのように思われます。それは言っている:表示とキャプチャSTDOUT

私はPERLスクリプト内から外部(非PERL)関数を呼び出そうとしています。私は関数からSTDOUTを(それが発生する)コンソールに印刷してもらいたいと思います。また、その情報をキャプチャして、それを呼び出す元のPERLスクリプトに戻したいと思います。

未遂ソリューションが含まれます:

#does not return the output 
my @output = system($cmd); 

#does not display the output as it occurs 
my @output = `$cmd`; 

#does not display the output as it occurs 
eval {$pid = open3($Input, $Output, $Error, $cmd); }; die "open3: [email protected]\n" if [email protected]; 

誰もが(リアルタイムで)画面にSTDOUTを印刷してもSTDOUTをキャプチャし、コールの元のソースに戻します両方の方法を知っていますか?

+0

@ascheplerあなたは正しいです!それはまさに私が探していたものです。それを指摘していただきありがとうございます。 –

+0

ちなみに、この質問を閉じたり、重複としてマークするにはどうしたらいいですか? –

+0

まだできません。十分な評判があれば、投票に投票することができます。質問を閉じるには5票が必要です。タグに金色のバッジを付けたユーザーは、自分のタグに近い質問を複製できます。あなたは[faq]をチェックしなければなりません(すべて読むことでバッジが得られます)。そして、https://stackoverflow.com/help/privilegesはすばらしい概要です。 – simbabque

答えて

2

Capture::Tinyこれを行うことができます。後でcapture_stdoutprintのどちらかを使用するか、またはtee_stdoutを使用して同時に印刷して取り込めます。

use strict; 
use warnings; 
use Capture::Tiny 'tee_stdout'; 

my $stdout = tee_stdout sub { `ls -lah` }; # prints 
print "ok\n" if $stdout =~ m/\./;   # matches 
関連する問題