免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3601 | 回复: 7
打印 上一主题 下一主题

请教perl的expect的使用,telnet到目标主机后,如何取某文件的数据到本地进行处理 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-05-04 11:57 |只看该作者 |倒序浏览
看了Expect的在线手册,
http://search.cpan.org/~rgiersig/Expect-1.15/Expect.pod
可是没看懂,请帮忙分析一下


如,使用expect telnet到目标主机,取文件/proc/stat的内容
然后在perl脚本中对该文件中的内容进行处理,得出cpu利用率

#!/bin/perl -w
use Expect;
my $exp = new Expect;
#$Expect::Log_Stdout = 0;
my $host = $ARGV[1];
my $username = $ARGV[2];
my $password = $ARGV[3];
my $command = "telnet $host";
$exp=Expect->spawn($command) or die "Cannot spawn $command: $!\n";

$exp->expect(30, “login:”);
$exp->send("$username\n");

$exp->expect(30, "assword:");
$exp->send("$password\n");

$exp->send("cat /proc/stat\n");
#此处使用cat取文件内容,在命令行中有输出,但是我该如何取这里数据来处理呢?

$exp->send("exit\n");
$exp->soft_close();

论坛徽章:
0
2 [报告]
发表于 2009-05-04 12:22 |只看该作者
为啥不ftp, scp

论坛徽章:
0
3 [报告]
发表于 2009-05-04 12:42 |只看该作者
因为目标主机只开放telnet
取文件只是一个举例,其实问题应该是如何将在目标主机上执行的命令返回信息截取到本地进行分析

论坛徽章:
0
4 [报告]
发表于 2009-05-04 12:47 |只看该作者
真是个悲剧阿
为啥要bypass $ARGV[0]

论坛徽章:
0
5 [报告]
发表于 2009-05-04 13:04 |只看该作者
4楼的兄弟能说明白些吗?不理解你的意思。。。

论坛徽章:
0
6 [报告]
发表于 2009-05-04 13:08 |只看该作者

回复 #5 copywu 的帖子

你这命令行参数
my $host = $ARGV[1]
那$ARGV[0]去哪了?
调用的时候难道是

  1. ./script_name dummy host username password
复制代码

???

论坛徽章:
0
7 [报告]
发表于 2009-05-04 13:21 |只看该作者
ok, try this code

  1. use strict;
  2. use warnings;
  3. use Expect;
  4. my $exp = new Expect;
  5. $Expect::Log_Stdout = 0;
  6. my $host     = $ARGV[0];
  7. my $username = $ARGV[1];
  8. my $password = $ARGV[2];
  9. my $command  = "telnet $host";
  10. $exp = Expect->spawn($command) or die "Cannot spawn $command: $!\n";
  11. $exp->expect( 30, "login:" );
  12. $exp->raw_pty(1);

  13. $exp->send("$username\n");
  14. $exp->expect( 30, "assword:" );

  15. $exp->send("$password\n");
  16. $exp->expect( 1, '$' );

  17. $exp->print("cat /proc/stat\n");
  18. $exp->expect( 1, undef );

  19. #此处使用cat取文件内容,在命令行中有输出,但是我该如何取这里数据来处理呢?

  20. my $read = $exp->before();
  21. print $read;
  22. $exp->send("exit\n");
  23. $exp->soft_close();
复制代码

$read里面的内容需要你自己提取一下

[ 本帖最后由 churchmice 于 2009-5-4 13:23 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2009-05-04 13:42 |只看该作者
哦,谢谢churchmice

$ARGV[0]我在程序里有其他用处,这里抄代码上来时候忘记改了呵呵,
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP