python实现批处理文件


Posted in Python onJuly 28, 2020

本文实例为大家分享了python实现批处理文件的具体代码,供大家参考,具体内容如下

Windows下的bat, linux 下的shell 用来做批处理都很好用,可惜不通用
用 Python 来做就简单多了,不过一条条写代码来调用系统命令也够烦的了
程序员都很懒, 不愿做机械无谓的重复性工作, 干脆自己实现一个.

用法超级简单, 默认会执行一个自定义的 batch.json, 按顺序一条条执行其中的步骤

{"steps": 
 [
 {"step":"df -h","desc":"display disk space usage"},
 {"step":"date","desc":"display the current dater"},
 {"step":"time","desc":"display the current time"}
 ]
}

用法:

python batch.py

当然也可以指定不同的步骤文件 , 例如

python batch.py xxx.json

运行结果以markdown形式输出, 例如

$ python batch.py
Usage: python batch.py <batch_json_file>
note: execute the batch.json by default
# Execute batch.json begin
---------------------------

## Will execute 3 steps
~~~~~~~~~~~~~~~~~~~~~~~~~~~
0. [df -h]: display disk space usage
1. [date]: display the current dater
2. [time]: display the current time

* 0. [df -h]: display disk space usage
Filesystem       Size Used Avail Capacity iused ifree %iused Mounted on
/dev/disk1       233Gi 208Gi 24Gi 90% 54622825 6364694 90% /
devfs        329Ki 329Ki 0Bi 100%  

* 1. [date]: display the current dater
Thu Mar 3 22:50:21 CST 2016

* 2. [time]: display the current time

real 0m0.001s
user 0m0.000s
sys 0m0.000s

## Done the following steps
~~~~~~~~~~~~~~~~~~~~~~~~~~~
0. [df -h]: display disk space usage
1. [date]: display the current dater
# Execute batch.json end.

Python源代码如下, 希望有人能用得上

'''
 like bat file, execute the steps in batch.json 
'''
import os,sys,subprocess
import time,thread
import codecs
import json
from datetime import datetime
from subprocess import call
from pprint import pprint

def execute_json(json_file):
 print "# Execute {0} begin\n---------------------------".format(json_file)

 json_data=open(json_file)
 data = json.load(json_data)
 cnt = len(data['steps'])
 i = 0
 print "\n## Will execute {0} steps \n~~~~~~~~~~~~~~~~~~~~~~~~~~~".format(cnt)
 for i in range(0, cnt):
   print "{0}. [{1}]: {2}".format(i, data['steps'][i]['step'], data['steps'][i]['desc'])

 #pprint(data)
 #print("cnt=", cnt)
 for i in range(0, cnt):
  cmd = data['steps'][i]['step']
  desc = data['steps'][i]['desc']
  print "\n* {0}. [{1}]: {2} ".format(i, cmd, desc)

  if(cmd.startswith('cd')):
   cmd = cmd.replace("cd ", "")
   os.chdir(cmd)
  else:
   ret = os.system(cmd)
   if(ret != 0):
    print "Encounter error of step {0}. {1}, error code={2}".format(i, cmd, ret)
    break

 print "\n## Done the following steps\n~~~~~~~~~~~~~~~~~~~~~~~~~~~"
 for j in range(0, i):
  print "{0}. [{1}]: {2}".format(j, data['steps'][j]['step'], data['steps'][j]['desc']) 
 json_data.close()
 print "# Execute {0} end.".format(json_file)

if __name__ == "__main__":
 argc = len(sys.argv)
 step_file = 'batch.json'
 if( argc > 1):
  idx = 1
  while(idx < argc):
   step_file = sys.argv[idx]
   execute_json(step_file)
   idx = idx + 1
 else:
  print "Usage: python {0} <batch_json_file>".format(sys.argv[0])
  print "note: execute the batch.json by default"
  execute_json(step_file)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
用Python进行基础的函数式编程的教程
Mar 31 Python
解决python3中解压zip文件是文件名乱码的问题
Mar 22 Python
Python cookbook(数据结构与算法)将多个映射合并为单个映射的方法
Apr 19 Python
Python使用try except处理程序异常的三种常用方法分析
Sep 05 Python
Python读取csv文件分隔符设置方法
Jan 14 Python
解决python字典对值(值为列表)赋值出现重复的问题
Jan 20 Python
利用python numpy+matplotlib绘制股票k线图的方法
Jun 26 Python
使用pickle存储数据dump 和 load实例讲解
Dec 30 Python
关于windows下Tensorflow和pytorch安装教程
Feb 04 Python
django在保存图像的同时压缩图像示例代码详解
Feb 11 Python
python传到前端的数据,双引号被转义的问题
Apr 03 Python
windows+vscode安装paddleOCR运行环境的步骤
Nov 11 Python
Python3安装模块报错Microsoft Visual C++ 14.0 is required的解决方法
Jul 28 #Python
python爬虫请求头设置代码
Jul 28 #Python
详解python安装matplotlib库三种失败情况
Jul 28 #Python
最简单的matplotlib安装教程(小白)
Jul 28 #Python
Python 如何实现访问者模式
Jul 28 #Python
Matplotlib 折线图plot()所有用法详解
Jul 28 #Python
matplotlib.pyplot.plot()参数使用详解
Jul 28 #Python
You might like
PHP和XSS跨站攻击的防范
2007/04/17 PHP
php 8小时时间差的解决方法小结
2009/12/22 PHP
PHP中的常见魔术方法功能作用及用法实例
2015/07/01 PHP
Yii2语言国际化的配置教程
2018/08/19 PHP
javascript(jquery)利用函数修改全局变量的代码
2009/11/02 Javascript
Jquery在IE7下无法使用 $.ajax解决方法
2009/11/11 Javascript
改写一个简单的菜单 弹性大小
2010/12/02 Javascript
jquery更换文章内容与改变字体大小代码
2013/09/30 Javascript
JavaScript函数的4种调用方法详解
2014/04/22 Javascript
JavaScript点击按钮后弹出透明浮动层的方法
2015/05/11 Javascript
jQuery.prop() 使用详解
2015/07/19 Javascript
jQuery插件FusionCharts实现的MSBar3D图效果示例【附demo源码】
2017/03/23 jQuery
无循环 JavaScript(map、reduce、filter和find)
2017/04/08 Javascript
JavaScript实现前端实时搜索功能
2020/03/26 Javascript
bmob js-sdk 在vue中的使用教程
2018/01/21 Javascript
vuejs2.0运用原生js实现简单拖拽元素功能
2020/08/21 Javascript
配置node服务器并且链接微信公众号接口配置步骤详解
2019/06/21 Javascript
vue-cli设置css不生效的解决方法
2020/02/07 Javascript
vue打包静态资源后显示空白及static文件路径报错的解决
2020/09/02 Javascript
[03:24]DOTA2超级联赛专访hao 大翻盘就是逆袭
2013/05/24 DOTA
python爬虫爬取某站上海租房图片
2018/02/04 Python
python3连接MySQL数据库实例详解
2018/05/24 Python
Python自动抢红包教程详解
2019/06/11 Python
python脚本后台执行方式
2019/12/21 Python
SQL里面如何插入自动增长序列号字段
2012/03/29 面试题
什么是TCP/IP
2014/07/27 面试题
护士专业推荐信
2013/11/02 职场文书
英语自荐信范文
2013/12/11 职场文书
应届毕业生个人求职自荐信
2014/01/06 职场文书
幼儿园消防安全制度
2014/01/26 职场文书
《乡下孩子》教学反思
2014/04/17 职场文书
三八红旗手先进事迹材料
2014/05/13 职场文书
人身损害赔偿协议书范本
2014/09/27 职场文书
七年级作文之环保作文
2019/10/17 职场文书
深入浅析Redis 集群伸缩原理
2021/05/15 Redis
opencv读取视频并保存图像的方法
2021/06/04 Python