我正在尝试测试特定服务器已启动并在某个端口上运行,因此我正在使用
$result = `echo exit | telnet 127.0.0.1 9443`; print $result;
我在这里使用localhost来解决隐私问题 预期的行为是它应该打印" ...无法打开与主机的连接,在端口9443上:连接失败",这样我就知道服务器没有运行。但它会打印一个空字符串
对此有任何帮助
答案 0 :(得分:3)
失败消息打印到STDERR
,而反引号仅返回STDOUT
。
您可以将STDERR
信息流重定向到STDOUT
信息流
$result = `echo exit | telnet 127.0.0.1 9443 2>&1`;
请参阅I/O redirection。
使用各种形式的open
,有更多方法可以做到这一点。见it in perlfaq8。还有各种模块。 Capture::Tiny使它变得相当容易。
use warnings 'all';
use strict;
use Capture::Tiny qw(capture);
my $cmd = 'echo exit | telnet 127.0.0.1 9443';
my ($stdout, $stderr) = capture {
system ( $cmd );
};
print "STDOUT: $stdout";
print "STDERR: $stderr";
这为我打印
STDOUT: Trying 127.0.0.1... STDERR: telnet: connect to address 127.0.0.1: Connection refused
该模块具有更多功能。来自文档
Capture :: Tiny提供了一种简单,可移植的方式来捕获发送到STDOUT或STDERR的几乎任何内容,无论它是来自Perl,来自XS代码还是来自外部程序。