2016-10-17 23 views
1

Я пытаюсь проверить конкретный сервер запущена и работает на определенный порту поэтому я использую $result = `echo exit | telnet 127.0.0.1 9443`; print $result;Использования телнета с трубой с обратными кавычками в Perl

Здесь я использую Localhost для обеспечения конфиденциальности вопросов Ожидаемое поведение что он должен печатать «... Не удалось открыть соединение с хостом, на порту 9443:« Не удалось подключиться », таким образом я знаю, что сервер не запущен. но он печатает пустую строку

Любой помощь по этим

ответ

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 :: Крошка обеспечивает простой, переносимый способ захватить почти все отправленные на STDOUT или STDERR, независимо от того, будет ли он из Perl, от XS кода или из внешней программы.

+0

Он по-прежнему печатает пустую строку, которую я пробовал. Когда я пытаюсь использовать другие команды, такие как 'which java', он правильно печатает вывод, но в команде telnet он не –

+0

@AhmedAbuzekry Это кажется странным. Я попробовал, и я возвращаю сообщение. – zdim

+0

Не знаю Я пробовал это раньше и не работает –

 Смежные вопросы

  • Нет связанных вопросов^_^