用 python 实现批处理文件

来源:互联网 发布:信息化与大数据 编辑:程序博客网 时间:2024/06/15 00:53

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.pyUsage: 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 usage1. [date]: display the current dater2. [time]: display the current time* 0. [df -h]: display disk space usageFilesystem                          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 daterThu Mar  3 22:50:21 CST 2016* 2. [time]: display the current timereal    0m0.001suser    0m0.000ssys 0m0.000s## Done the following steps~~~~~~~~~~~~~~~~~~~~~~~~~~~0. [df -h]: display disk space usage1. [date]: display the current dater# Execute batch.json end.

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

'''    like bat file, execute the steps in batch.json '''import os,sys,subprocessimport time,threadimport codecsimport jsonfrom datetime import datetimefrom subprocess import callfrom pprint import pprintdef 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)
1 0
原创粉丝点击