python实现linux命令输出两列_Python实现Linux命令xxd -i功能

def Xxdi():

#解析命令行选项及参数

([base, cols, strip], [inFile, outFile]) = ParseOption()

import os

if os.path.isfile(inFile) is False:

print ''''%s' is not a file!''' %inFile

return

with open(inFile, 'rb') as file: #必须以'b'模式访问二进制文件

#file = open(inFile, 'rb') #Python2.5以下版本不支持with...as语法

#if True:

#不用for line in file或readline(s),以免遇'0x0a'换行

content = file.read()

#将文件内容"打散"为字节数组

if base is 16: #Hexadecimal

content = map(lambda x: hex(ord(x)), content)

elif base is 10: #Decimal

content = map(lambda x: str(ord(x)), content)

elif base is 8: #Octal

content = map(lambda x: oct(ord(x)), content)

else:

print '[%s]: Invalid base or radix for C language!' %base

return

#构造数组定义头及长度变量

cArrayName = GenerateCArrayName(inFile)

if strip is False:

cArrayHeader = 'unsigned char %s[] = {' %cArrayName

else:

cArrayHeader = ''

cArrayTailer = '};\nunsigned int %s_len = %d;' %(cArrayName, len(content))

if strip is True: cArrayTailer = ''

#print会在每行输出后自动换行

if outFile is None:

print cArrayHeader

for i in range(0, len(content), cols):

line = ', '.join(content[i:i+cols])

print ' ' + line + ','

print cArrayTailer

return

with open(outFile, 'w') as file:

#file = open(outFile, 'w') #Python2.5以下版本不支持with...as语法

#if True:

file.write(cArrayHeader + '\n')

for i in range(0, len(content), cols):

line = reduce(lambda x,y: ', '.join([x,y]), content[i:i+cols])

file.write(' %s,\n' %line)

file.flush()

file.write(cArrayTailer)

Python2.5以下版本不支持with...as语法,而作者调试所用的Linux系统仅装有Python2.4.3。因此,要在Linux系统中运行xddi.py,只能写为file = open(...。但这需要处理文件的关闭和异常,详见理解Python中的with…as…语法。注意,Python2.5中使用with...as语法时需要声明from __future__ import with_statement。

可通过platform.python_version()获取Python版本号。例如:

import platform

#判断Python是否为major.minor及以上版本

def IsForwardPyVersion(major, minor):

#python_version()返回'major.minor.patchlevel',如'2.7.11'

ver = platform.python_version().split('.')

if int(ver[0]) >= major and int(ver[1]) >= minor:

return True

return False

经过Windows和Linux系统双重检验后,Xddi()工作基本符合预期。以123456789ABCDEF.txt文件(内容为'123456789ABCDEF')为例,测试结果如下:

E:\PyTest>python xxdi.py -c 5 -b 2 -s 123456789ABCDEF.txt

[2]: Invalid base or radix for C language!

E:\Pytest>python xxdi.py -c 5 -b 10 -s 123456789ABCDEF.txt

49, 50, 51, 52, 53,

54, 55, 56, 57, 65,

66, 67, 68, 69, 70,

E:\PyTest>python xxdi.py -c 5 -b 10 123456789ABCDEF.txt

unsigned char __123456789ABCDEF_txt[] = {

49, 50, 51, 52, 53,

54, 55, 56, 57, 65,

66, 67, 68, 69, 70,

};

unsigned int __123456789ABCDEF_txt_len = 15;

E:\PyTest>python xxdi.py -c 5 -b 8 123456789ABCDEF.txt

unsigned char __123456789ABCDEF_txt[] = {

061, 062, 063, 064, 065,

066, 067, 070, 071, 0101,

0102, 0103, 0104, 0105, 0106,

};

unsigned int __123456789ABCDEF_txt_len = 15;

E:\PyTest>python xxdi.py 123456789ABCDEF.txt

unsigned char __123456789ABCDEF_txt[] = {

0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, 0x43,

0x44, 0x45, 0x46,

};

unsigned int __123456789ABCDEF_txt_len = 15;

再以稍大的二级制文件为例,执行 python xxdi.py VdslBooter.bin booter.c后,booter.c文件内容如下(截取首尾):

unsigned char VdslBooter_bin[] = {

0xff, 0x31, 0x0, 0xb, 0xff, 0x3, 0x1f, 0x5a, 0x0, 0x0, 0x0, 0x0,

//... ... ... ...

0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,

0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,

};

unsigned int VdslBooter_bin_len = 53588;

综上可见,作者实现的xxdi模块与Linux xxd -i功能非常接近,且各有优劣。xxdi优点在于对数组名合法性校验更充分(关键字检查),数组内容表现形式更丰富(8进制和10进制);缺点在于不支持重定向,且数值宽度不固定(如0xb和0xff)。当然,这些缺点并不难消除。例如,用'0x%02x'%val代替hex(val)即可控制输出位宽。只是,再加完善难免提高代码复杂度,也许会事倍功半。

以上所述是小编给大家介绍的Python实现Linux命令xxd -i功能,希望对大家以上帮助!

相关文章

在Django框架中运行Python应用全攻略

在Python的Django框架中创建和使用模版

python获取元素在数组中索引号的方法

浅谈python中截取字符函数strip,lstrip,rstrip

Python实现Linux命令xxd -i功能

网友评论

文明上网理性发言,请遵守 新闻评论服务协议

我要评论

立即提交

PHP

MySQL

HTML

CSS

JavaScript

jQuery

AJAX

Html5

独孤九贱(5)_ThinkPHP5视频教程

独孤九贱(5)_ThinkPHP5视频教程

ThinkPHP是国内最流行的中文PHP开发框架,也是您Web项目的最佳选择。《php.cn独孤九贱(5)-ThinkPHP5视频教程》课程以ThinkPHP5最新版本为例,从最基本的框架常识开始,将...

Peter-Zhu

2017-05-16 12:03:57

点击数(161379)

独孤九贱(4)_PHP视频教程

独孤九贱(4)_PHP视频教程

江湖传言:PHP是世界上最好的编程语言。真的是这样吗?这个梗究竟是从哪来的?学会本课程,你就会明白了。 我要学编程网wyxbc.com出品的PHP入门系统教学视频,完全从初学者的角度出发,绝不玩虚的,一切以实用、有用...

Peter-Zhu

2017-03-20 22:47:17

点击数(158349)

独孤九贱(1)_HTML5视频教程

独孤九贱(1)_HTML5视频教程

《php.cn原创html5视频教程》课程特色:我要学编程网wyxbc.com原创幽默段子系列课程,以恶搞,段子为主题风格的php视频教程!轻松的教学风格,简短的教学模式,让同学们在不知不觉中,学会了HTML知识。 ...

Peter-Zhu

2017-03-13 10:15:11

点击数(127303)

ThinkPHP5实战之[教学管理系统]

ThinkPHP5实战之[教学管理系统]

本套教程,以一个真实的学校教学管理系统为案例,手把手教会您如何在一张白纸上,从零开始,一步一步的用ThinkPHP5框架快速开发出一个商业项目。

Peter-Zhu

2017-07-24 16:48:56

点击数(119756)

PHP入门视频教程之一周学会PHP

PHP入门视频教程之一周学会PHP

所有计算机语言的学习都要从基础开始,《PHP入门视频教程之一周学会PHP》不仅是PHP的基础部分更主要的是PHP语言的核心技术,是学习PHP必须掌握的内容,任何PHP项目的实现都离不开这部分的内容,通...

大家讲道理

2016-11-16 14:54:14

点击数(119493)

作者信息

我要学编程网wyxbc.com

认证0级讲师

最近文章

最新文章

热门排行

Python列表如何统计元素的出现频率?(代码示例)

Python如何初始化列表?

Python动态定义函数的方法介绍

Python怎么合并子列表的元素?

好用的Python IDE推荐

如何使用Python中range()方法?

python单链表中如何查找和删除节点?

python单链表中如何插入和输出节点?(代码示例)

pickle库的使用详解

Anaconda的新手使用大全

Python微信库:itchat的用法详解

python爬虫是什么?为什么把python叫做爬虫?

python爬虫是什么

关于python3学习基础知识总结

使用Python可以做什么

python如何实现可视化热力图

相关视频教程

javascript初级视频教程 javascript初级视频教程

jquery 基础视频教程 jquery 基础视频教程

javascript三级联动视频教程 javascript三级联动视频教程

独孤九贱(3)_JavaScript视频教程 独孤九贱(3)_JavaScript视频教程

独孤九贱(6)_jQuery视频教程 独孤九贱(6)_jQuery视频教程

相关视频章节

框架搭建

自定义方法

比较运算符

条件语句

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值