免费注册 查看新帖 |

Chinaunix

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

请问pytnon下用pexpect可以实现下面的要求吗 [复制链接]

论坛徽章:
14
处女座
日期:2013-11-26 09:21:15操作系统版块每日发帖之星
日期:2016-03-25 06:20:00操作系统版块每日发帖之星
日期:2016-03-22 06:20:00操作系统版块每日发帖之星
日期:2016-03-21 06:20:00数据库技术版块每日发帖之星
日期:2015-11-13 06:20:00操作系统版块每日发帖之星
日期:2015-11-01 06:20:002015亚冠之卡尔希纳萨夫
日期:2015-09-29 13:31:42IT运维版块每日发帖之星
日期:2015-08-13 06:20:00IT运维版块每日发帖之星
日期:2015-08-10 06:20:00数据库技术版块每日发帖之星
日期:2015-08-06 06:20:00双鱼座
日期:2014-07-17 15:08:51卯兔
日期:2014-04-08 09:54:34
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-02-27 17:05 |只看该作者 |倒序浏览
我要写一个脚本,校验文件的完整性,并且讲校验结果发送到一台apache的web站点下
我想的步骤是
1.登录svn服务器找到需要抓取的文件(文件有多个)生成md5校验码sort排序导入到txt文本文件回传到本地;
2.在本地找到传回的多个文件生成md5校验码排序并且导入到txt文本文件;
3.对比两个文本文件,每行对比,每行显示一个ok;
4.将反馈的结果发送到apache的站点下。

高人给个思路

论坛徽章:
14
处女座
日期:2013-11-26 09:21:15操作系统版块每日发帖之星
日期:2016-03-25 06:20:00操作系统版块每日发帖之星
日期:2016-03-22 06:20:00操作系统版块每日发帖之星
日期:2016-03-21 06:20:00数据库技术版块每日发帖之星
日期:2015-11-13 06:20:00操作系统版块每日发帖之星
日期:2015-11-01 06:20:002015亚冠之卡尔希纳萨夫
日期:2015-09-29 13:31:42IT运维版块每日发帖之星
日期:2015-08-13 06:20:00IT运维版块每日发帖之星
日期:2015-08-10 06:20:00数据库技术版块每日发帖之星
日期:2015-08-06 06:20:00双鱼座
日期:2014-07-17 15:08:51卯兔
日期:2014-04-08 09:54:34
2 [报告]
发表于 2012-02-27 17:24 |只看该作者
本帖最后由 royzs 于 2012-02-27 17:25 编辑

我自己曾用expect写成下面这样,未果
  1. [root@aa ~]# cat expect1.sh
  2. #!/usr/bin/expect

  3. #


  4. set user [lindex $argv 0]

  5. set host [lindex $argv 1]

  6. set password [lindex $argv 2]

  7. set dir [lindex $argv 3]

  8. #set file [lindex $argv 4]


  9. #spawn ssh $user@$host -C "find '$dir' -name '$file' | xargs -n 1 md5sum"

  10. #spawn ssh $user@host -C "find '$dir' -type f|xargs md5sum|sort>md5.txt"

  11. spawn scp $user@host:/tmp/`find '$dir' -type f|xargs md5sum|sort>/tmp/md5.txt` /tmp/


  12. expect "password:"


  13. send "$password\n"


  14. expect eof


  15. exit

  16. [root@aa ~]# ./expect1.sh root 192.168.1.35 123456 /root/tools

  17. spawn scp root@host:/tmp/`find '/root/tools' -type f|xargs md5sum|sort>/tmp/md5.txt` /tmp/

  18. 123456

  19. [root@aa ~]# ls /tmp/

  20. [root@aa ~]#
  21. [root@aa ~]#
  22. [root@aa ~]#
  23. [root@aa ~]#
复制代码

论坛徽章:
0
3 [报告]
发表于 2012-02-27 20:27 |只看该作者
文件scp回来了,两台服务器上scp过来的文件paste一下再awk一下不就解决了

click link

论坛徽章:
14
处女座
日期:2013-11-26 09:21:15操作系统版块每日发帖之星
日期:2016-03-25 06:20:00操作系统版块每日发帖之星
日期:2016-03-22 06:20:00操作系统版块每日发帖之星
日期:2016-03-21 06:20:00数据库技术版块每日发帖之星
日期:2015-11-13 06:20:00操作系统版块每日发帖之星
日期:2015-11-01 06:20:002015亚冠之卡尔希纳萨夫
日期:2015-09-29 13:31:42IT运维版块每日发帖之星
日期:2015-08-13 06:20:00IT运维版块每日发帖之星
日期:2015-08-10 06:20:00数据库技术版块每日发帖之星
日期:2015-08-06 06:20:00双鱼座
日期:2014-07-17 15:08:51卯兔
日期:2014-04-08 09:54:34
4 [报告]
发表于 2012-02-28 09:57 |只看该作者
回复 3# askandstudy


    高人请移步到这里
http://bbs.chinaunix.net/forum.p ... ;extra=#pid21884363

文件根本scp不回来,最要命的是md5.txt根本没有生成,我不清楚问题出在哪里,最后更新的帖子是看过你给我的博文之后又反复测试写出来的

论坛徽章:
0
5 [报告]
发表于 2012-02-28 10:14 |只看该作者
回复 4# royzs

你在那个帖子里编辑过的是你的操作的完全复制吗?
你在29行执行脚本时,30行spawn,31行显示的应该是提示要你输入密码,都没有expect期望的"password:"出现你就直接发送密码了。先把这里解决再说后面的操作吧。
   

论坛徽章:
0
6 [报告]
发表于 2012-02-28 10:19 |只看该作者
另外你的root密码也不对啊,后面都报错了

root@192.168.1.35's password:
Permission denied, please try again.

论坛徽章:
14
处女座
日期:2013-11-26 09:21:15操作系统版块每日发帖之星
日期:2016-03-25 06:20:00操作系统版块每日发帖之星
日期:2016-03-22 06:20:00操作系统版块每日发帖之星
日期:2016-03-21 06:20:00数据库技术版块每日发帖之星
日期:2015-11-13 06:20:00操作系统版块每日发帖之星
日期:2015-11-01 06:20:002015亚冠之卡尔希纳萨夫
日期:2015-09-29 13:31:42IT运维版块每日发帖之星
日期:2015-08-13 06:20:00IT运维版块每日发帖之星
日期:2015-08-10 06:20:00数据库技术版块每日发帖之星
日期:2015-08-06 06:20:00双鱼座
日期:2014-07-17 15:08:51卯兔
日期:2014-04-08 09:54:34
7 [报告]
发表于 2012-02-28 10:20 |只看该作者
回复 5# askandstudy


是完整的复制啊,脚本里面这几行也可以看到的,
  1. spawn ssh $user@$host

  2. expect "password:"

  3. send "$password\r"
复制代码
只能这么写了啊,后面的也是这么写的,我也奇怪为什么这个地方没有提示,后面的就有

论坛徽章:
0
8 [报告]
发表于 2012-02-28 10:27 |只看该作者
本帖最后由 askandstudy 于 2012-02-28 10:29 编辑

那你先用个简单的脚本试一下最简单的看行不行再一步步查问题原因了
  1. [user1@RHEL6A shcode]$ cat expect11.sh
  2. #!/usr/bin/expect
  3. set user [lindex $argv 0]
  4. set host [lindex $argv 1]
  5. set password [lindex $argv 2]
  6. spawn ssh $user@$host
  7. expect "password:"
  8. send "$password\n"
  9. expect "#"
  10. send "ls\r"
  11. expect "#"
  12. send "exit\r"
复制代码
看看能不能看到host主机上相应用户家目录下的文件

加上相应的参数执行脚本应该是类似这样的结果:

spawn ssh root@rhel6a
root@rhel6a's password:
Last login: Tue Feb 28 10:50:40 2012 from ::1
[root@RHEL6A ~]# ls
adduser.8        cfgfile          eclipse             Public      shexp

论坛徽章:
0
9 [报告]
发表于 2012-02-28 10:41 |只看该作者
如果不行的话,看看ssh -C的方式执行命令行不行,可以的话就用这种方式。不太清楚你的ssh命令为什么不能正常运行。

论坛徽章:
14
处女座
日期:2013-11-26 09:21:15操作系统版块每日发帖之星
日期:2016-03-25 06:20:00操作系统版块每日发帖之星
日期:2016-03-22 06:20:00操作系统版块每日发帖之星
日期:2016-03-21 06:20:00数据库技术版块每日发帖之星
日期:2015-11-13 06:20:00操作系统版块每日发帖之星
日期:2015-11-01 06:20:002015亚冠之卡尔希纳萨夫
日期:2015-09-29 13:31:42IT运维版块每日发帖之星
日期:2015-08-13 06:20:00IT运维版块每日发帖之星
日期:2015-08-10 06:20:00数据库技术版块每日发帖之星
日期:2015-08-06 06:20:00双鱼座
日期:2014-07-17 15:08:51卯兔
日期:2014-04-08 09:54:34
10 [报告]
发表于 2012-02-28 10:50 |只看该作者
回复 8# askandstudy


    刚刚你说的是对的,那次执行确实连登录都没有成功,原来是主机hosts文件里面内容丢了,我重新添加后就ok了,然后我再次执行就报这样的错误了
  1. [root@test ~]# cat md5.sh
  2. #!/usr/bin/expect
  3. set user [lindex $argv 0]
  4. set host [lindex $argv 1]
  5. set password [lindex $argv 2]
  6. set dir [lindex $argv 3]
  7. set file [lindex $argv 4]
  8. #spawn ssh $user@$host -C "find '$dir' -name '$file' | xargs -n 1 md5sum"
  9. spawn ssh $user@$host
  10. expect "password:"
  11. send "$password\r"
  12. #expect "$"
  13. expect "\#"
  14. send "pwd\r"
  15. #expect "$"
  16. expect "\#"
  17. send "ls\r"
  18. #expect "$"
  19. expect "\#"
  20. send "find '$dir' -type f|xargs md5sum|sort > md5.txt\n"
  21. #expect "$"
  22. expect "\#"
  23. send "ls\r"
  24. #expect "$"
  25. expect "\#"
  26. send "cat md5.txt\r"
  27. #expect "$"
  28. expect "\#"
  29. send "exit\r"
  30. #expect "$"
  31. expect "\#"
  32. spawn scp $user@$host:~/md5.txt /tmp/
  33. expect "password:"
  34. send "$password\r"
  35. interact
  36. expect eof
  37. exit


  38. [root@test~]# ./md5.sh root 192.168.1.35 123456 /root/tools *
  39. spawn ssh root@192.168.1.35
  40. root@192.168.1.35's password:
  41. Last login: Mon Sep 26 14:05:11 2011 from 192.168.1.33
  42. [root@test~]# pwd
  43. /root
  44. [root@test~]# ls
  45. anaconda-ks.cfg  bak           install.log         logbak               sh.sh  test1   tools       yq
  46. a.out            functions.sh  install.log.syslog  mysql-5.0.56.tar.gz  soft   testaa  xunhuan.sh
  47. [root@test~]# find '/root/tools' -type f|xargs md5sum|sort > md5.txt
  48. [root@test~]# ls
  49. anaconda-ks.cfg  bak           install.log         logbak   mysql-5.0.56.tar.gz  soft   testaa  xunhuan.sh
  50. a.out            functions.sh  install.log.syslog  md5.txt  sh.sh                test1  tools   yq
  51. [root@test~]# cat md5.txt
  52. bcadada96fa5cb1782bef0eb0a92f160  /root/tools/jdk-6u17-linux-x64-rpm.bin
  53. dd0c1f4f92e1cd33d90a775e97a6b472  /root/tools/resin-3.0.21.tar.gz
  54. [root@test~]# exit
  55. logout
  56. Connection to 192.168.1.35 closed.
  57. spawn scp root@192.168.1.35:~/md5.txt /tmp/md5.txt
  58. root@192.168.1.35's password:
  59. md5.txt                                                                                                    100%  139     0.1KB/s   00:00   
  60. expect: spawn id exp7 not open
  61.     while executing
  62. "expect eof"
  63.     (file "./md5.sh" line 35)
复制代码
我有两个地方诧异,一是find在目标主机上面执行的时间太短,二是find之后为什么就logout了,并且回到了我当前的主机上面执行scp;
于是我尝试了一种方法,那就是在find后面加入sleep 20,但是我看到的是在执行find之前sleep了20秒,find时依然时间很短。
目标主机的home目录下生成了md5.txt,本地也有了/tmp/下的md5.txt,但是里面只有两条记录,我的/root/tools/中文件可远远不止这两个文件的,我能想到的只有这么多了
  1. cat md5.txt
  2. bcadada96fa5cb1782bef0eb0a92f160  /root/tools/jdk-6u17-linux-x64-rpm.bin
  3. dd0c1f4f92e1cd33d90a775e97a6b472  /root/tools/resin-3.0.21.tar.gz
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP