最近根据老大要求,将数据进行同步备份,结合第三方提供的工具。第三方服务其实是有python demo的,本想研究下实际的python sdk搞个demo开发的,但是发现有些组建装起来确实头大,而且本公司线上的python版本也确实够低只能另想办法。

  最终确定方案如下:利用第三方提供的相关管理工具(当然是Linux下的),通过python调用系统工具(本人对shell在这方面不是特别感冒,当然文本处理除外),然后将脚本输出重定向到日志文件中,方便检查文件上传成功或失败的具体情况处理。

  那么就会设计到三个问题:1、上传的文件列表(由于涉及到与客户端接口key问题,还要进行处理,不能为绝对路径);2、调用第三方提供的包,用工具进行上传;3、输出日志的分析处理

  针对于第一个问题,功能函数如下:

 import os,re
pathname = open('pathlist.txt','w+')
filename = open('filelist.txt','w+') def find_file(arg, dirname, files):
for file in files:
file_path = os.path.join(dirname, file)
if os.path.isfile(file_path):
pathname.write('%s \n' % file_path) def key(file):
tmppathname = open(file,'r')
for line in tmppathname:
line_tmpA = re.split('aaa',line) #由于key的规则后端已经设置好了,那么在脚本中也要做相应的处理,通过分隔符来处理实际的需求,需要什么就给什么,通过list实现
line_tmpB = str(line_tmpA[1])
filename.write('%s' % line_tmpB) os.path.walk(r"/a/b/c/aaa",find_file,()) key('filelist.txt')

  到了第二部分python函数中嵌套shell命令:

  

 def backup(file):
tmppathname = open(file,'r')
for key in tmpfilename:
localfile = '/a/b/c/aa'+key #其中key和localfile为第三方工具包需要的参数
os.environ['key'] = key  #通过os.environ将需要传递的参数变量做赋值
os.environ['localfile'] = localfile
os.system('proxy-client --action put --bucket aaa --key $key --file $localfile') backup('filelist.txt')

  第二部分的实现还是比较简单的,到了第三部分日志环节的处理由于是初次遇见处理起来比较麻烦,通过cat log.txt 和less log.txt发现结果分别如下图:

  

  

  cat 执行后发现进度条是动态处理的,但是less查看日志文件后发现很多特殊符号,本人在这一步的处理花了点时间(初次遇到),有考虑过用正则去匹配,可是发现最后的输出确实NoneType,也许是本人的功夫还没到家==!。一直考虑这个看起来形如^H的如何处理,查了半天发现这货竟然是个输出不显示的组合键。。。。。。还是个组合键,所以在处理的时候并不是简单的依葫芦画瓢,写上^H,而应该是Ctrl+v 然后继续Ctrl+H,这样才可以对这个特殊字符进行处理。所以第三部分的代码如下:

  

 #!/usr/bin/env python
import re,string
logname = open('log_online.txt','r')
logtest = open('log_test.txt','w+')
for line in logname:
# print type(line)
# print line_a
line_b = line_a.split('>')
# print type(line_b)
logtest.write(line_b[-1]) #这里主要考虑到输出结果中并不一定都是上传成功的案例,所以通过分析规律发现取分隔符>最后一个元素即为上传结果。
logtest.close()

  这是当时测试过程写的,也比较接单,关键就是思路问题。

  与大家共勉!

python 之调用Linux shell命令及相关高级应用的更多相关文章

  1. [Python2.x] 利用commands模块执行Linux shell命令

    用Python写运维脚本时,经常需要执行linux shell的命令,Python中的commands模块专门用于调用Linux shell命令,并返回状态和结果,下面是commands模块的3个主要 ...

  2. Python下调用Linux的Shell命令

    有时候难免需要直接调用Shell命令来完成一些比较简单的操作,比如mount一个文件系统之类的.那么我们使用Python如何调用Linux的Shell命令?下面来介绍几种常用的方法: 1. os 模块 ...

  3. python调用linux的命令

    有时候难免需要直接调用Shell命令来完成一些比较简单的操作,比如mount一个文件系统之类的.那么我们使用Python如何调用Linux的Shell命令?下面来介绍几种常用的方法: 1. os 模块 ...

  4. python 调用Linux shell

    有时候难免需要直接调用Shell命令来完成一些比较简单的操作,比如mount一个文件系统之类的.那么我们使用Python如何调用Linux的Shell命令?下面来介绍几种常用的方法: 1. os 模块 ...

  5. PHP调用Linux的命令行执行文件压缩命令&&创建文件夹修改权限

    一开始,我和普通青年一样,想到用PHP内置的 ZipArchive纠结的是环境上没安装zip扩展,想采用用PHP调用Linux的命令行 ,执行压缩命令,感兴趣的朋友可以了解下,希望本文对你有所帮助 前 ...

  6. java使用Runtime.exec()运行windwos dos或linux shell命令

    使用Runtime.exec()运行windwos dos或linux shell命令,按实际情况具体测试     实例代码: package com.bookoo.test.command; imp ...

  7. 73条日常Linux shell命令汇总,总有一条你需要!

    转载: 73条日常Linux shell命令汇总,总有一条你需要! 1.检查远程端口是否对bash开放: echo >/dev/tcp/8.8.8.8/53 && echo &q ...

  8. 用ruby调用执行shell命令

    碰到需要调用操作系统shell命令的时候,Ruby为我们提供了六种完成任务的方法: 1.Exec方法:     Kernel#exec方法通过调用指定的命令取代当前进程:   例子:       $ ...

  9. Linux shell命令中expr

    在Linux shell命令中expr虽然不是很起眼,但是它的作用是非常大的!到目前为止,我个人看来最大的作用就是两个——四则运算和字符串的操作. 先说四则运算,在Shell中四则运算不能简简单单的加 ...

随机推荐

  1. EF如何操作内存中的数据和加载外键数据:延迟加载、贪婪加载、显示加载

    EF如何操作内存中的数据和加载外键数据:延迟加载.贪婪加载.显示加载 之前的EF Code First系列讲了那么多如何配置实体和数据库表的关系,显然配置只是辅助,使用EF操作数据库才是每天开发中都需 ...

  2. [转]SQL Server中临时表与表变量的区别

    [转]http://blog.csdn.net/skyremember/archive/2009/03/05/3960687.aspx 我们在数据库中使用表的时候,经常会遇到两种使用表的方法,分别就是 ...

  3. Java设计模式透析之 —— 适配器(Adapter)

    转载请注明出处:http://blog.csdn.net/sinyu890807/article/details/9400141 今天一大早,你的leader就匆匆忙忙跑过来找到你:“快,快,紧急任务 ...

  4. 从零开始学C++之STL(四):算法简介、7种算法分类

    一.算法 算法是以函数模板的形式实现的.常用的算法涉及到比较.交换.查找.搜索.复制.修改.移除.反转.排序.合并等等. 算法并非容器类型的成员函数,而是一些全局函数,要与迭代器一起搭配使用. 算法的 ...

  5. 飘逸的python - 简明gzip模块压缩教程

    压缩数据创建gzip文件 先看一个略麻烦的做法 import StringIO,gzip content = 'Life is short.I use python' zbuf = StringIO. ...

  6. about flashback_transaction_query

    详见原文博客链接地址:about flashback_transaction_query

  7. 学习新手给Android新手的一些学习建议

    时间紧张,先记一笔,后续优化与完善. Shamoo做Android开辟已有一年了,对Android开辟也有一点点了解.上面就给Android新手说说我对Android浅面的意识和一点建议吧,知道的大牛 ...

  8. Dubbo源码学习--注册中心分析

    相关文章: Dubbo源码学习--服务是如何发布的 Dubbo源码学习--服务是如何引用的 注册中心 关于注册中心,Dubbo提供了多个实现方式,有比较成熟的使用zookeeper 和 redis 的 ...

  9. python3.4 data type

    #coding=utf-8 #Python 3.4 https://docs.python.org/3.4/library/ #IDE:Eclipse +PyDev Window10 import a ...

  10. html5之datalist标签

    当我看到这个标签的时候,其实我是很愤怒的.因为我以前实现过这个标签的功能,当时是无比的费劲.什么js库呀,function呀.我靠,统统去屎吧,哥有datalist了.那种感觉就好像自己千辛万苦去追去 ...