这两天重新调整一些原来做的py程序,想让它自动一些,省得多动手。尤其想多运用fabric,这个是类似ruby社区capitrano的部署工具。fabric从0.9版本,更换了一个维护着,在结构上做了很多调整,在windows下使用也还算顺当,只要paramiko的版本1.7.4就可以了,1.7.5似乎在连接远程主机上有问题。还是看自己做的fabfile.py文件吧。

from __future__ import with_statement

from fabric.api import run, put, hosts, env, local
import os, os.path, glob
import conv_xls

def staging():
    env.hosts = ['172.16.7.13']
    env.user = 'hzg'
    env.password = '1234'
    env.datadir = 'd:\\nps_data\\'
    env.remotedir = '/home/hzg/work/source/'

def year2009():
    env.year = '2009'

def year2010():
    env.year = '2010'

def conv():
    conv_xls.conv_xls_files("%s%s"%(env.datadir, env.year,))

def send():
    put("%s%s\\*.XLS"%(env.datadir, env.year,),
                "%s%s/"%(env.remotedir, env.year,))

def move():
    if len(glob.glob('%s%s\\*.XLS'%(env.datadir, env.year,))) != 0:
        local("copy %s%s\\*.XLS "%(env.datadir, env.year,)+
                 "%s%s_down\\"%(env.datadir, env.year,))

        local("del %s%s\\*.XLS"%(env.datadir, env.year,))
    else:
        print 'no xls files'

def remote_import():
    run(". /home/hzg/mypy/bin/activate;
           cd /home/hzg/work/fx_analysis/nps;
           python parseexcel_db.py -y %s" % (env.year,))

0.9版本的fabric,可以直接采用py的模块,这点上很方便。使用的方式上,task之间可以连续的递进的方式来进行。对于独立写task的组合,很是方便的。

fab staging year2009 conv
fab staging year2010 send

这样就可以连续组合使用env的各种变量和任务了。