【发布时间】:2018-03-11 05:25:00
【问题描述】:
我做了很多谷歌将程序的 STDOUT 和 STDERR 重定向到 perl 中的变量,最初我尝试同时使用 open 和 反引号,但未能捕获变量的错误信号。
我发布这个问题是因为现在我得到了解决方案并希望它可以帮助其他人..
【问题讨论】:
标签: perl system stdout stderr backticks
我做了很多谷歌将程序的 STDOUT 和 STDERR 重定向到 perl 中的变量,最初我尝试同时使用 open 和 反引号,但未能捕获变量的错误信号。
我发布这个问题是因为现在我得到了解决方案并希望它可以帮助其他人..
【问题讨论】:
标签: perl system stdout stderr backticks
要将 STDOUT 和 STDERR 都放入变量中,请使用以下代码 sn-p 使用反引号 (``)。
确保 2>&1 位于命令末尾,以便将 STDERR 重定向到 STDOUT。
提供错误命令时,
my $Temp_return;
$Temp_return = `lse 2>&1`;
print "return = " . $Temp_return . "\n";
错误输出是,
return = 'lse' is not recognized as an internal or external command, operable program or batch file.
对于正确的命令,您将得到相应的结果。
作为附加信息,在 Perl 中执行命令的不同方法是。
system() :如果你想执行一个命令并且对读取执行命令的控制台输出不感兴趣。
exec : 当您不想返回调用 Perl 脚本时。使用相同的。
反引号: 当您想将命令的控制台输出 /read 存储到 Perl 变量中时。一开始我误以为,需要用Single cores('')代替,反引号(``),弄糊涂了,因为和Single cores('')差不多,请注意。
open() :当您想将命令(作为输入或输出)通过管道传输到您的脚本时。
希望对你有帮助.....:)
BR, 杰里·詹姆斯
【讨论】: