2016-10-17 5 views
1

でバッククォートとパイプとのTelnetを使用すると、私はプライバシーの問題にlocalhostを使用しています 予想される動作は、アップと私はここで $result = `echo exit | telnet 127.0.0.1 9443`; print $result;私は、特定のサーバーをテストしようとしていますperlの

を使用していますので、特定のポートで実行されています"...ポート9443でホストへの接続を開けませんでした:接続に失敗しました"というように、この方法でサーバーが実行されていないことがわかります。バッククォートはSTDOUTに行くだけで何返しながら、それは、空の文字列

に失敗メッセージがSTDERRにプリントされ、この

答えて

3

上の任意のヘルプを表示します。

あなたは

$result = `echo exit | telnet 127.0.0.1 9443 2>&1`; 

I/O redirectionを参照してくださいSTDOUTストリームにSTDERRストリームをリダイレクトすることができます。


さまざまな形の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 

を印刷します。ドキュメントから

キャプチャ::タイニーは関係なく、それはPerlのから、XSコードから、または外部プログラムから来ているかどうかの、STDOUTやSTDERRに送信されたほとんどすべてを捕獲するための簡単な、移植可能な方法を提供します。

+0

それでも私はそれを試した空の文字列を表示します。 'which java'のような他のコマンドを試してみると、出力が正しく出力されますが、telnetコマンドでは表示されません。 –

+0

@AhmedAbuzekryそれは変です。私はそれを試して、私はメッセージを返す。 – zdim

+0

私は以前に試したことが分かりませんし、動作していません。 –

関連する問題