脚本输入输出重定向
来源:互联网 发布: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]))
但是这种做法一点也不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
- 脚本输入输出重定向
- shell脚本学习11——输入输出重定向
- linux shell脚本案例八:输入输出重定向
- 输入输出重定向
- Linux输入输出重定向
- 输入输出重定向
- 输入输出重定向
- Linux输入输出重定向
- createprocess 输入输出重定向
- linux输入输出重定向
- 输入输出重定向
- Java输入输出重定向!
- 重定向输入输出
- Linux输入输出重定向
- C#输入输出重定向
- 输入输出重定向
- 输入输出重定向 '<' '>'
- Linux输入输出重定向
- 什么是I帧,P帧,B帧
- android的问题总结
- 自定义View 标题栏
- VIM编译器:设置行号和[Tab]的缩进空格数目
- 几个JavaScript面试题
- 脚本输入输出重定向
- objective-C_语言_委托模式
- iOS 弹幕库LeoDanmakuKit的中文文档(1.0.1)
- [Python标准库]collections——容器数据类型[二]
- 【CSS+DIV】(1)——滤镜的应用
- 欢迎使用CSDN-markdown编辑器
- spatialhadoop2.3源码阅读(十) TextOutputFormat & LineRecordWriter[FileMBR]
- matlab xcorr函数实现与普遍定义的不同
- Android线程结束——合理的结束你想结束的线程