次のような perl 関数が組み込まれているか、ライブラリに含まれていますか。
run(IN_FILEHANDLE, OUT_FILEHANDLE, ERR_FILEHANDLE, $cmd);
外部コマンドを IN_FILEHANDLE から読み取り、OUT_FILEHANLE に書き込み、stderr を ERR_FILEHANDLE に取得します。
例えば
run(STDIN, STDOUT, STDERR, $cmd);
次のようになります。
system($cmd);
と:
run(IN, OUT, ERR, $cmd);
次の存在しないバージョンのようになります。
open(IN, OUT, ERR, "|$cmd|");
使いやすくopen($fh, "|$cmd");
、open($fh, "$cmd|");
ファイルハンドルから読み書きするだけです。両方の方法で機能するものが欲しいだけです。
代わりに、オプションでスカラーへの読み取り/書き込みもできる場合のボーナスポイント。
私はopen3
andをいじっていましIPC::Run
たが、それらを機能させることができないようです。実際の例(おそらく say をgrep
使用)をいただければ幸いです。
編集:コメントに応じて、私の現在のコード:
open3($stdin_fh, $stdout_fh, $stderr_fh, $refresh_exec); #1
print "Opened"; #2
print $stdin_fh "Input to command\n"; #3
行番号 2 に到達する前にハングするようです
と使用IPC::Run
:
start \@cmd_arr, $stdin_fh, $stdout_fh, $stderr_fh;
print "Opened"; #2
print $stdin_fh "Input to command\n"; #3
コマンドを実行しますが、書き込みでエラーが発生します: Can't use an undefined value as a symbol reference
.
自分のコードが不完全であることはわかっていますが、400 行のコードを貼り付けたくはありません。コードをうまく切り詰めて問題を切り分けることができれば、質問する必要はありません。
open3
自分がやりたいことをするかどうかさえわからないIPC::Run
ので、構築できる実用的なソリューションを探しています。