三大运维工具

fabric ,paramiko ,pexpect


paramiko

ftp

之前用pexpect 执行scp ,内容比较大,莫名其妙会丢失一些数据,几百K,导致,用ffmpeg 做转换的时候视频有损失,用了paramiko做ftp好太多了。

当时在连接的时候 在使用 ssh key这里遇到坑。这句话不要忘记 很重要

这里遇到坑

s.set_missing_host_key_policy(paramiko.AutoAddPolicy())

pexpect

这个感觉太强大了

file=f
child = pexpect.spawn(upload, timeout=None, logfile=file)
index = child.expect(["(?i)100%","(?i)No such file or directory", pexpect.EOF])
if (index == 0):
    file.write('upload success')
    print 'upload success'
elif (index ==1):
    run(mkdir, timeout=None, logfile=file)
    print 'mkdir upload directory'
    child = pexpect.spawn(upload, timeout=None, logfile=file)
    index = child.expect(["(?i)100%", pexpect.EOF])
    if (index == 0):
       file.write('upload success')
       print 'upload success'
    else:
       file.write('upload failed')
       print 'upload failed'
else:
    file.write('upload failed')
    print 'upload failed'

就单看这个demo,child。。。。可用(?i)...实现交互,这个简直太棒了 pexpect这个库就是有很多交互的地方。

当时遇到的坑,

  1. timeout,耗时任务这个要设置长一些,或者timeout=None

  2. cmd 命令没有执行,需要注意,pexpect.spawn(cmd)的时候,要有 .readlins()这种类似的方法才会执行。直接用run(cmd)不存在这样的问题,但是run()命令的交互,,反正我用

    child = pexpect.spawn(cmd, timeout=None, logfile=logFile)
    child.readlines()

fabric

就是 远程登录命令,这个要比那些库都方便。
快捷
不用写太多复杂的东西

遇到的坑

  1. 在Ubuntu定义一个def,调用的时候 不能加括号

     def test():
        print ‘enene’
        
     @roles('dev')
     def dev():
         run('apt-get update')
         test  
    

    在mac的时候必须用()

     @roles('dev')
     def dev():
         run('apt-get update')
         test()       
    
  2. @roles 注解的方法 不能有变量

     @roles('dev')
     def dev(name): 不可以的
         run('apt-get update')
         print name    
    
  3. 如果用

           run('''cat > requirements.txt <

这种 cat 方式的时候 $ 这种字符会丢失,当时 使用cat 方式 设置 nginx 凡是 有 $的 都不见了。

不方便的地方

  1. 交互比较差,没有pexpect.spawn 这种方法,安装软件会问 y/n ,安装数据库,设置密码。等等信息 还得手动输入 可能是自己还没有遇到吧
  2. 不能同时 @task @roles 不太方便
  • 感觉 prompt 没啥用啊,直接用 raw_input() 不行就行了。

    raw_input("Enter destination ip: ");
    fabric.operations.prompt("Enter hostname")

  • 还有confirm 现在 没感觉

低级错误

注意python 名字不能 跟library的 名字相同,开始我给自己文件名 起名:fabric.py,一运行显示找不到....

tips:

使用ssh key 登录 查看

env.key_filename = "~/.ssh/showmuse_server/id_rsa"

http://www.linuxidc.com/Linux/2014-11/108809.htm

你可能感兴趣的:(三大运维工具)