Perl 5.8从SSH命令获取Stdout

时间:2014-09-26 21:47:20

标签: perl ssh centos ipc qx

我需要创建一个适用于CentOS 5.xCentOS 6.x框的脚本。 CentOS 5.x使用Perl 5.8,CentOS 6.x使用Perl 5.10。我们的目标是能够将ssh放入具有密钥交换的框中,然后运行python -V,以确定默认版本是否为python 2.6

我猜我是否得到了一个适用于Perl 5.8的脚本,它也适用于5.10。我在Net::SSH:Any取得了一些进展,不得不抛弃它,因为它看起来与Perl 5.12和更新版本一起使用。

我也尝试了IPC::System::Simpleqx,但没有抓住输出的运气。

我的一些失败尝试:

失败1:

use IPC::System::Simple qw(system systemx capture capturex);
my $output = capture("/usr/bin/ssh root\@10.100.10.56 python -V");
print "out: " . $output . "\n";

失败2:

my $output = qx(ssh root\@10.100.10.56 python -V);
print "out: " . $output . "\n";

失败3:

my @output = qx(ssh root\@10.100.10.56 python -V);
print "@output\n";

我不确定ssh的电话是否正在播放任何内容,我迫切需要进行健全性检查。当命令运行时,输出显示在屏幕上,但不存储在变量中,我可以对其进行子串检查。 $output变量留空。如果我遗失了什么,请告诉我。谢谢:))

1 个答案:

答案 0 :(得分:2)

从ThisSuitIsBlackNot的建议中找出它。我发现Getting STDOUT, STDERR, and response code from external *nix command in perl向我展示了如何更新我的代码以获得stderr,具体如下:

my $output = qx(ssh root\@10.100.10.56 python -V 2>&1);
print "out: " . $output . "\n";

这给了我所需要的东西。 THX!