在 OPEN pipe 命令中重定向 STDERR。Perl Linux

弗雷德曼

我限制使用的 perl 版本是 v5.10.0;

我有一个脚本“script1”需要调用另一个脚本“script2”。

为了绕过 shell 并避免命令行注入,我在 perl 中使用“open”来执行此操作。

open(my $fh, "-|", "/path/to/script2", "-n", "$param") 或者说 "failure $@";

我无法修改 script2。

我需要将 stderr 的输出从 script2 获取到 script1 中的变量中。

我得到了“-|” 语法来自https://perldoc.perl.org/functions/open.html但这里的描述主要是一个如何做的例子,而不是它在做什么,所以我不知道如何将 err 重定向到 out 或甚至至少将 err 重定向到其他一些变量。

我希望看起来类似于这两个选项之一的东西:

# option 1)
open(my $fh, "-|", "/path/to/script2", "-n", "$param") or say "failure $@";
while($line = <$fh>) {  # stderr and stdout are both fed to $line
     print $line;
}

# option 2)
open(STDERR, "+<", $stderr);
open(my $fh, "-|", "/path/to/script2", "-n", "$param") or say "failure $@";
while($line = <$fh>) {  #stdout is fed to $line
     print $line;
}
while($line = <$stderr>) {  #stderr from script2 is fed to $line
     print $line;
}
哈康海格兰

我会使用IPC::Run3

use strict;
use warnings;
use IPC::Run3;

run3 ['script2.pl', '-n', $param], undef, \my $out, \my $err;

这将为您提供script2.pl变量中的 STDERR $err

从文档:

run3($cmd, $stdin, $stdout, $stderr, \%options)

$cmd 之后的所有参数都是可选的。

参数 $stdin、$stdout 和 $stderr 指示子项的相应文件句柄(STDIN、STDOUT 和 STDERR,分别)将如何重定向。因为重定向在最后,这允许 STDOUT 和 STDERR 通过不指定它们来默认为父级——这是一个常见的用例。

$cmd

通常 $cmd 将是一个 ARRAY 引用,并且通过调用子项

system @$cmd;

请注意,$cmd作为数组引用传递将避免在与命令相同的条件下通过 shell 运行system()命令

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Linux中读写PIPE

来自分类Dev

在Jruby中重定向STDERR

来自分类Dev

Perl INT处理程序和Bash STDERR重定向

来自分类Dev

使用系统命令将stdout和stderr输出重定向到文件在perl中不起作用

来自分类Dev

将eval的STDERR重定向到perl中的/ dev / null

来自分类Dev

在Python中处理PIPE-Raspbian Linux

来自分类Dev

在Linux系统上,如何将stdout重定向到stderr?

来自分类Dev

在bash中的命令之间使用&符时,重定向stdout和stderr

来自分类Dev

将带有stderr重定向的管道命令的输出分配给脚本中的变量时,csh(tcsh)的输出重定向不明确

来自分类Dev

在scala中重定向输出单位功能/方法,作为Linux mail命令中的标准

来自分类Dev

重定向命令后重定向stdout和stderr

来自分类Dev

在Google Colab中重定向或查看stderr

来自分类Dev

在C中重定向stderr

来自分类Dev

重定向stderr更改管道命令的退出代码

来自分类Dev

使用exec重定向所有后续命令的stderr

来自分类Dev

Linux:如何将stdout和stderr重定向到记录器?

来自分类Dev

如何在Linux中从命令重定向所有输出

来自分类Dev

Perl INT处理程序和Bash STDERR重定向

来自分类Dev

使用系统命令将stdout和stderr输出重定向到文件在perl中不起作用

来自分类Dev

将带有stderr重定向的管道命令的输出分配给脚本中的变量时,csh(tcsh)的输出重定向不明确

来自分类Dev

在Python中处理PIPE-Raspbian Linux

来自分类Dev

自行创建的Linux Shell中的重定向

来自分类Dev

在bash中的命令之间使用&符时重定向stdout和stderr

来自分类Dev

Linux如何确定执行组合重定向的命令中的操作顺序?

来自分类Dev

当命令作为变量传递时,如何在命令替换中包括stdout / stderr重定向?

来自分类Dev

重定向命令后重定向stdout和stderr

来自分类Dev

如何重定向busybox中的stderr?

来自分类Dev

在 shell (linux) 中的输入重定向中,每个命令的处理方式是否不同?

来自分类Dev

使用 IO::Pipe Perl 管道 STDERR

Related 相关文章

  1. 1

    在Linux中读写PIPE

  2. 2

    在Jruby中重定向STDERR

  3. 3

    Perl INT处理程序和Bash STDERR重定向

  4. 4

    使用系统命令将stdout和stderr输出重定向到文件在perl中不起作用

  5. 5

    将eval的STDERR重定向到perl中的/ dev / null

  6. 6

    在Python中处理PIPE-Raspbian Linux

  7. 7

    在Linux系统上,如何将stdout重定向到stderr?

  8. 8

    在bash中的命令之间使用&符时,重定向stdout和stderr

  9. 9

    将带有stderr重定向的管道命令的输出分配给脚本中的变量时,csh(tcsh)的输出重定向不明确

  10. 10

    在scala中重定向输出单位功能/方法,作为Linux mail命令中的标准

  11. 11

    重定向命令后重定向stdout和stderr

  12. 12

    在Google Colab中重定向或查看stderr

  13. 13

    在C中重定向stderr

  14. 14

    重定向stderr更改管道命令的退出代码

  15. 15

    使用exec重定向所有后续命令的stderr

  16. 16

    Linux:如何将stdout和stderr重定向到记录器?

  17. 17

    如何在Linux中从命令重定向所有输出

  18. 18

    Perl INT处理程序和Bash STDERR重定向

  19. 19

    使用系统命令将stdout和stderr输出重定向到文件在perl中不起作用

  20. 20

    将带有stderr重定向的管道命令的输出分配给脚本中的变量时,csh(tcsh)的输出重定向不明确

  21. 21

    在Python中处理PIPE-Raspbian Linux

  22. 22

    自行创建的Linux Shell中的重定向

  23. 23

    在bash中的命令之间使用&符时重定向stdout和stderr

  24. 24

    Linux如何确定执行组合重定向的命令中的操作顺序?

  25. 25

    当命令作为变量传递时,如何在命令替换中包括stdout / stderr重定向?

  26. 26

    重定向命令后重定向stdout和stderr

  27. 27

    如何重定向busybox中的stderr?

  28. 28

    在 shell (linux) 中的输入重定向中,每个命令的处理方式是否不同?

  29. 29

    使用 IO::Pipe Perl 管道 STDERR

热门标签

归档