したコマンドがちょうどSTDOUTがスクリプトにパイプされ、スクリプトから同じSTDINとSTDERRを受け始めました。
コマンドを実行する前にSTDINを閉じるだけで、入力ソースがなくてもかまいません。 STDINから読み取るとエラーが発生し、呼び出されたコマンドは終了します。
close STDIN;
my @slines = `$command`;
これにより、コンソールへのコンソール入力の可能性もなくなります。
別のアプローチは、あなたのスクリプトが同時にコマンドのSTDINとSTDOUTを制御することを可能にするIPC::Open2
を使用します。
use IPC::Open2;
open2($chld_in, $chld_in, 'some cmd and args');
print $chld_in "\n\n";
close $chld_in;
@slines = <$chld_out>;
close $chld_out;
このスクリプトは、コマンドによって必要な2つの\n
の入力を提供し、コマンド出力を読み込みます。 私:; それはその後になる 私@slines = `" $ command`:
http://search.cpan.org/~rgiersig/Expect-1.15/Expect.pod – xxfelixxx