闲坐小窗写python,不知春去已多时

上一篇 / 下一篇  2014-09-05 15:57:26 / 个人分类:python

 

接手一个活,不得不接,大肚皮生孩子去了,当时明显的感觉这是一个坑,交接的时候就一堆文档过来了,文档是很详细的,干活是纯手工打造的,纯手工打造的联测环境,相当的不容易啊。手工打造一辆车多少钱啊,据说劳斯莱斯就是纯手工的,我们的联测环境就是测试环境的劳斯莱斯啊,想到这里,你叔我不由得感觉这是一个高大上的事情啊。纯手工这事,叔本身还是比较擅长的,家里的洗衣机淘宝上买个配件就修好了。但 转脸一想,不对啊,这事纯手工打造,还不累死你叔我。所以,叔开始想想办法。叔最大的优点就是喜欢偷懒。能坐着绝不站着,能躺着绝不坐着。

 

叔虽然不是开发出身,也是粗通各种开发工具的,汇编、Cdephijava都能写几句。要解决这种问题以前的思路那必须是delphiRAD的开发理念,很快就能搞出一个小工具。想当年,form上画一个button,里面写一句代码,一编译就里面运行起来,button一点,浓墨重彩的HELLO WORLD马上呈现在你的面前,那感觉一个字,倍儿爽。

不过这个事放到现在,得拓宽思路。思来想去,觉得还是用脚本实现比较方便,所以决定用pyhon搞一把。python版本挺多,不过现在最流行的貌似是2.7,这个版本上的很多库都是可以拿来用的。3.0以上的版本有人说好有人说不好,搞不清楚。所以还是用老版的。

 

首先要解决的就是要把so上传到linux服务器。首先要找现在支持ssh协议的库。查了不少资料,最后知道了、

Python中使用SSH需要用到OpenSSH,而OpenSSH依赖于paramiko模块,而paramiko模块又依赖于pycrypto模块,因此要在Python中使用SSH,则需要先安装模块顺序是:pycrypto -> ecdsa -> paramiko

装好之后,测试了ssh登陆,和sftp上传下载文件,都没有问题,当时叔龙颜大悦,马上下去到全家买了块面包奖励自己。

可是回来之后马上碰到了问题,作为一个苦逼中国的技术人员,首先面对的就是字符编码的问题,太烦人了,后来想想苦逼的迪拜技术人员应该也有字符编码问题,不比我们好那里去,心里大大滴平衡了。

如果目录中含有中文字符里面就会有乱码,尝试了n种办法,终于解决。(python2.7有这个问题,python3的版本要好很多)

对于中文字符的处理,网上有很多资料,叔就不重复,简单说一下自己的体会:

首先代码第一行必须来这么一句:#-*- coding:  utf-8-*- ,这个编码国际通用,会省很多麻烦

code:

#-*- coding:  utf-8-*-  
#!/usr/bin/env python    
import os    
import sys

def test1():
    print 'test1' 
    s = '中午'
    print s

结果是乱码(不会贴图)

 

 

乱码!但是不要慌,代码稍微改一下就ok

 def test2():

    print 'test2' 

    s = '中午'

    print s.decode('utf-8')

 

 结果正常。太好了,看到认识的中国字了,还是简体的。哦也!

 

还有一种方法:

def test3():

    print 'test3' 

    s =u'中午'

    print s

 

执行结果正常。经过多种情况的实验,发现test3最靠谱。

 

重头戏来了,首先先上传一个文件玩玩,python代码量就是少,很容易就实现了。

 def  get_local_xx_files(local_path,type):


    print 'Search local so file..........................'

    try:

        file_list = {}

        for root,dirs,files in os.walk(local_path,False):  

            for file in files:

                file_name = os.path.join(root,file)

                #file_name = unicode(os.path.join(root,file),'gbk')  

                if  file_name[-2:] == type:

                    #print file_name

                    file_list[file_name] = file  

                #print file_list

        return file_list

    except:

        pass

 

接下来就要遍历目录的处理,遍历目录简单,网上有现成的例子,但是遍历中文目录就难了(编码问题),上面那三个test是叔多次试验的精华总结,总之在这个上面花了太多时间,闲坐小窗写pathon,不知春去已多时。

 

写出来其实也就这么几句,其中被注释掉的一句是为了中文编码的问题做的测试,保留一下作为纪念。

 def upload_so_file(local_so_files,remote_path):

    try:

        t = paramiko.Transport((hostname, port))

        t.connect(username=username, password=password)

        sftp = paramiko.SFTPClient.from_transport(t)

        

        for key,value in local_so_files.iteritems():

            remote_file =  remote_path+ '/' + value

            sftp.put(key,remote_file)

            print  'put file ok:' + remote_file

    

#    sftp.get(remotepath,localfile1)

        t.close();

    except Exception, e:

        import traceback

        traceback.print_exc()

        try:

            t.close()

        except:

            print


 

 看最后的运行结果:(就能贴一张,什么破论坛)

 

 

 

 

 

 

 

 

 

 

 

 

 


TAG: paramiko Python python sftp utf-8 UTF-8

 

评分:0

我来说两句

我的栏目

日历

« 2024-04-29  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 6256
  • 日志数: 4
  • 建立时间: 2014-09-05
  • 更新时间: 2014-11-28

RSS订阅

Open Toolbar