2012-04-08 47 views
0

我必須通過通過Expect模塊執行的SSH連接到遠程機器。如果可能,我必須單獨訪問STDERR/STDOUT並查看輸出。我可以重定向腳本的輸出,例如如何在Perl中通過SSH在遠程計算機上執行命令的STDERR和STDOUT?

$command = "ssh <script> 2>/tmp/stderr.output" 
$exp = Expect->spawn($command) or die "Cannot spawn\n";; 
my @command1= $exp->expect(5); 

但後來我不得不再次遠程連接檢查stderr.output。 有沒有一種方法可以單獨返回STDERR/STDOUT

+0

爲什麼它必須分開?如果他們去了相同的輸出將工作?或者你不知道你可能在找什麼錯誤? – Ilion 2012-04-08 12:11:58

+0

感謝您的評論。錯誤報告由單獨的代碼段(單獨的團隊)處理,並且我知道今天的錯誤,所以不要讓此代碼依賴於此。這是遠程機器上的腳本。 – doon 2012-04-08 13:48:45

回答

3

你可能要考慮使用Net::OpenSSH它提供了一個capture2方法:

($output, $errput) = $ssh->capture2(\%opts, @cmd)

捕獲由@cmd在遠程機器上同時發送到stdoutstderr輸出。

+0

我不能使用Net:OpenSSH。我受限於我工作的平臺中包含的庫。預計提供。 Net:OpenSSH不是:-( – doon 2012-04-08 13:47:14

+3

)你知道你可以從用戶目錄運行一個CPAN模塊而不需要在服務器上全局安裝嗎?你應該能夠將Net :: OpenSSH下載到你的主目錄並從那裏引用它 – Ilion 2012-04-08 20:31:38

+0

然後只需將模塊中的所有代碼複製到程序中,最壞的情況 – 2012-04-08 20:49:43

相關問題