是否有一個Perl的功能,無論是內置的,或者是像下面這樣的庫: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
和IPC::Run
四處尋找,但我似乎無法讓他們工作。工作示例(可能與例如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
做我想做的,所以我只是尋找一個我可以建立的工作解決方案。
你爲什麼不用'run3'顯示你正在使用的代碼,並解釋到底哪些工作不工作? – Mat 2013-05-02 07:19:38
更多詳細信息已添加。 – Clinton 2013-05-02 07:32:48
你在'輸入到命令'的末尾放了'\ n'嗎? – Barmar 2013-05-02 07:45:38