如何将 Perl 的 system() 的输出重定向到文件句柄?
通过 Perl 中的 open 命令,您可以使用文件句柄。但是,我无法使用 Perl 中的 open 命令取回退出代码。
使用 Perl 中的 system 命令,我可以取回程序的退出代码我正在跑步。但是我只想将 STDOUT 重定向到某个文件句柄(没有 stderr)。
我的标准输出将是键值对的逐行输出,我想将其插入到 perl 中的 mao 中。这就是为什么我只想从 Perl 中的 Java 程序重定向我的标准输出。这可能吗?
注意:如果出现错误,错误将打印到 stderr。一种可能性是检查是否有任何内容打印到 stderr,以便我可以完全执行 Perl 脚本。
With the open command in Perl, you can use a filehandle. However I have trouble getting back the exit code with the open command in Perl.
With the system command in Perl, I can get back the exit code of the program I'm running. However I want to just redirect the STDOUT to some filehandle (no stderr).
My stdout is going to be a line-by-line output of key-value pairs that I want to insert into a mao in perl. That is why I want to redirect only my stdout from my Java program in perl. Is that possible?
Note: If I get errors, the errors get printed to stderr. One possibility is to check if anything gets printed to stderr so that I can quite the Perl script.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
按照规范,如果您试图获取分叉进程的文本输出,我的理解是这就是反引号的用途。如果您还需要退出状态,可以随后使用
$?
特殊变量进行检查,例如:反引号中命令的输出到 STDERR 不会被捕获,而是直接写入调用它的 Perl 程序中的 STDERR。
Canonically, if you're trying to get at the text output of a forked process, my understanding is that's what the backticks are for. If you need the exit status as well, you can check it with the
$?
special variable afterward, e.g.:Output to STDERR from the command in backticks will not be captured, but will instead be written directly to STDERR in the Perl program it's called from.
您可能需要查看 IPC::System::Simple - - 它为您提供了许多选项来执行外部命令、捕获其输出和返回值,以及如果返回错误结果则可选择死亡。
You may want to check out IPC::System::Simple -- it gives you many options for executing external commands, capturing its output and return value, and optionally dying if a bad result is returned.
这是实现这一目标的方法之一。
This is one of the ways to do it.
在
-|
模式下使用open
。当您关闭
文件句柄时,退出状态将为$?
。来自
perldoc -f close
Use
open
in-|
mode. When youclose
the filehandle, the exit status will be in$?
.From
perldoc -f close