Author:Alex Xiang(x86)
Date: 03/19/2009
工作上的需要,需要写一些Python脚本,顺便把学习过程中的一些心得记下来以备查看。
1. python 三元操作
类似于C的x=a?:0:1,python的方式是:x=a and 0 or 1
2. 模块间共享变量
三个模块a,b,c,其中a和b都要用到c的变量
a:
import c
from b import *
print c.x
b:
import c
c.x = 1
c:
x = 0
3. 十六进制数的显示
一个十六进制数要按字符串的方式显示,可以这样:
x=0x100
'0x%x' %x
'0x100'
4. 正则表达式
得到内存大小:
import re
import os
lines = os.popen("free").readlines()
p=re.compile(".*Mem:/s+(/d+)/s+.*", re.S)
m = p.match(str(lines))
if(m):
print "total=" + m.group(1) + "/n"
5. 数字和字符串之间转换
a="0x100"
b=int(a,16) # 第二个参数表示16进制,缺省是十进制
6.可变参数
一颗星类似于C的可变参数
def test1(a, *b):
print a
print "length of b is: %d " % len(b)
print b
print b[1]
test1(1,2,3,4)的输出结果:
1
length of b is: 3
(2, 3, 4)
3
两颗星表示参数是一个字典:
def test2(**a):
for i in a:
print i + " = " + a[i]
test2(a="1", b="2")的输出结果是:
a = 1
b = 2
7. 正则表达式,匹配多处结果
看看这个例子,每处匹配有两个项,注意re.S使得可以匹配多行(忽略/n)
>>> p=re.compile("a(/d+)b(/d+)c", re.S)
>>> result = p.findall("a1b1c,a2b2c/na3b3c/na4b4c")
>>> result
[('1', '1'), ('2', '2'), ('3', '3'), ('4', '4')]
8. 生成掩码
有一个列表,比如[1,3,4,5],生成一个掩码,如果某个数在列表里,则掩码相应位置1
mask = 0x0
for i in range(16):
if str(i) in a_list:
mask |= 1<
mask_str = "0x%x" % mask
9. 运行外部命令
用subprocess挺好
import subprocess
p = subprocess.Popen(cmd_str, shell=True, stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.PIPE)
stdoutdata, stderrdata = p.communicate()
if p.returncode != 0:
print "Failed。/n")
另一个例子,ping一个地址,用subprocess.call
def dl_ping(host):
ret = subprocess.call("ping -c 1 %s" % host, shell=True, stdout=open('/dev/null', 'w'), stderr=subprocess.STDOUT)
if ret == 0:
print host + " is alive/n"
return True
else:
print host + " did not respond/n"
return False