Perl中打开自定义文件句柄外部命令
是否有一个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
做我想做的,所以我只是寻找一个我可以建立的工作解决方案。
我想:
- 重定向STD *所需FH的。
- 执行
system($cmd);
- 将STD *恢复到原始状态。
看一看哈日的例如,对于详细的方法:
https://*.com/a/1720592/1485996
您也可以使用local
避免恢复STD。
你能举一个例子,说明如何让我直接将'print'打印到像'open($ fh,“| $ cmd”)''那样的'cmd'输入中? – Clinton 2013-05-02 14:41:27
你为什么不用'run3'显示你正在使用的代码,并解释到底哪些工作不工作? – Mat 2013-05-02 07:19:38
更多详细信息已添加。 – Clinton 2013-05-02 07:32:48
你在'输入到命令'的末尾放了'\ n'吗? – Barmar 2013-05-02 07:45:38