Perl - 命令行输出中出现停止错误
Perl - stop error appearing in command line output
我在做什么:
我有以下反引号命令,它在一个简单的 foreach 循环中执行并将命令输出保存到一个变量,然后我对该变量执行字符串匹配操作:
$ciphertestoutput = `echo -n | openssl s_client -cipher $tlsCipher -connect $ipaddress:443 2>/dev/null`;
问题:
但是,当我 运行 我的脚本在输出中出现时,我收到一条错误消息,我似乎无法停止出现。我不介意错误的发生,但我不希望错误显示在我所做的漂亮命令行输出的中间。
我的输出和错误:
EXP-DES-CBC-SHA CIPHER IS SUPPORTED on 192.168.1.22:443
EXP-EDH-DSS-DES-CBC-SHA CIPHER IS NOT SUPPORTED on 192.168.1.22.443
EXP-RC2-CBC-MD5 CIPHER IS NOT SUPPORTED on 192.168.1.22:443
connect: Connection refused <--- the error I cant get rid of
connect:errno=111 <--- the error I cant get rid of
EXP-RC4-MD5 CIPHER IS NOT SUPPORTED on 192.168.1.22:443
我试过的:
我已经尝试并尝试了所有我知道的方法来抑制输出中的错误消息,但我尝试的任何方法都无法阻止此错误的出现。我过去做过很多类似的事情,但从未遇到过反引号的问题。我在这里明显遗漏了什么吗?
考虑使用 IPC::Run3
:
use IPC::Run3; # Exports run3() by default
run3 \@cmd, $in, $out, $err;
它将 stdin、stdout 和 stderr 分离到不同的引用中。至少,它应该可以帮助您弄清楚发生了什么。
尝试在您的程序中重新打开 STDERR
:
open STDERR, '>/dev/null';
# your command
您的 qx
命令的错误将不会显示。所以你不必担心你将如何调用你的程序。
P.S。如果需要,您也可以保存 STDERR
:
open OLDERR, ">&", \*STDERR; # or die "$!";
open STDERR, ">/dev/null"; # or die "$!";
# your command
open STDERR, ">&OLDERR"; # restoring your stderr
close OLDERR;
# other code
您确定这些是错误而不是 OpenSSL 的输出(进入 STDOUT 而不是 STDERR)吗?如果您的所有预期输出都像您的示例一样以 EXP
开头,您可以尝试添加
| grep EXP
进行测试。
我在做什么:
我有以下反引号命令,它在一个简单的 foreach 循环中执行并将命令输出保存到一个变量,然后我对该变量执行字符串匹配操作:
$ciphertestoutput = `echo -n | openssl s_client -cipher $tlsCipher -connect $ipaddress:443 2>/dev/null`;
问题:
但是,当我 运行 我的脚本在输出中出现时,我收到一条错误消息,我似乎无法停止出现。我不介意错误的发生,但我不希望错误显示在我所做的漂亮命令行输出的中间。
我的输出和错误:
EXP-DES-CBC-SHA CIPHER IS SUPPORTED on 192.168.1.22:443
EXP-EDH-DSS-DES-CBC-SHA CIPHER IS NOT SUPPORTED on 192.168.1.22.443
EXP-RC2-CBC-MD5 CIPHER IS NOT SUPPORTED on 192.168.1.22:443
connect: Connection refused <--- the error I cant get rid of
connect:errno=111 <--- the error I cant get rid of
EXP-RC4-MD5 CIPHER IS NOT SUPPORTED on 192.168.1.22:443
我试过的:
我已经尝试并尝试了所有我知道的方法来抑制输出中的错误消息,但我尝试的任何方法都无法阻止此错误的出现。我过去做过很多类似的事情,但从未遇到过反引号的问题。我在这里明显遗漏了什么吗?
考虑使用 IPC::Run3
:
use IPC::Run3; # Exports run3() by default
run3 \@cmd, $in, $out, $err;
它将 stdin、stdout 和 stderr 分离到不同的引用中。至少,它应该可以帮助您弄清楚发生了什么。
尝试在您的程序中重新打开 STDERR
:
open STDERR, '>/dev/null';
# your command
您的 qx
命令的错误将不会显示。所以你不必担心你将如何调用你的程序。
P.S。如果需要,您也可以保存 STDERR
:
open OLDERR, ">&", \*STDERR; # or die "$!";
open STDERR, ">/dev/null"; # or die "$!";
# your command
open STDERR, ">&OLDERR"; # restoring your stderr
close OLDERR;
# other code
您确定这些是错误而不是 OpenSSL 的输出(进入 STDOUT 而不是 STDERR)吗?如果您的所有预期输出都像您的示例一样以 EXP
开头,您可以尝试添加
| grep EXP
进行测试。