脚本输入输出重定向

来源:互联网 发布:php 判断是不是整数 编辑:程序博客网 时间:2024/05/16 15:57

背景

看了一下现在招聘,都是要求一门脚本语言,而且最好是python,不难理解,现在监控和自动化运维最成功的估计就是python,已经学了scala了,不想再学ruby这种和scala一样甜的语言,那就写写python吧

目标

把linux shell编程艺术书上的脚本用python实现一遍,千里之行始于足下,说干就干

1

执行命令,将命令结果追加到文件

思路

sys.argv是个list,那么用切片应该是最简单和直观的,sys.argv[0]表示文件本身的路径,那么这个数组从1开始切片,终止则是倒数第二个,而倒数第一个则作为文件的输出路径

#!/usr/bin/python3.5import sysimport osfor cmd in sys.argv[1:-1]:    os.system('{command} >> {out_path}'.format(command=cmd, out_path=sys.argv[-1]))    split_line = '*' * len(cmd)    os.system('echo \'{line}\' >> {out_path}'.format(line=split_line, out_path=sys.argv[-1]))

res
但是这种做法一点也不python,还是用的shell的知识,所以后面又研究了一下,写了个新的

#!/usr/bin/python3.5import sysimport os# for cmd in sys.argv[1:-1]:#     os.system('{command} >> {out_path}'.format(command=cmd, out_path=sys.argv[-1]))#     split_line = '*' * len(cmd)#     os.system('echo \'{line}\' >> {out_path}'.format(line=split_line, out_path=sys.argv[-1]))os.system('rm {out}'.format(out=sys.argv[-1]))with open(sys.argv[-1], 'w') as file:    for cmd in sys.argv[1:-1]:        res = os.popen(cmd)        for f in res.readlines():            file.write(f)        file.write(len(cmd) * '*' + '\n')

感觉好多了

再加点难度

#!/usr/bin/python3.5import subprocessimport syswith open(sys.argv[-1], 'w') as file:    for (cmd, i) in dict(zip(sys.argv[1:-1], range(len(sys.argv) - 2))).items():        p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)        (std_output, error_output) = p.communicate()        file.write(str(i) + 'out' + '*' * len(cmd) + '\n')        file.write(str(std_output, encoding='utf8'))        file.write(str(i) + 'error' + '*' * len(cmd) + '\n')        file.write(str(error_output, encoding='utf8'))
0 0
原创粉丝点击