1 paramiko (基于openssh,python封装的ssh)
模块python自带
用法:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
import
paramiko
ssh
=
paramiko.SSHClient()
ssh.load_system_host_keys()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname
=
'192.168.100.20'
,port
=
58422
,username
=
'oldboy'
)
stdin, stdout,stderr
=
ssh.exec_command(
'uptime'
)
type
(stdout)
paramiko.ChannelFile
print
stderr.readlines()
[]
print
stdout.readlines()
[
' 21:35:05 up 1 day, 55 min, 2 users, load average: 0.00, 0.00, 0.00\n'
]
|
相当于shell当中的
1
|
ssh
-p58422 oldboy@192.168.100.20 -o StrictHostKeyChecking=no
'uptime'
|
2 subprocess(尽量不要用这个模块,返回不美观,如果只是执行shell命令推荐commands模块) Python3
python自带模块 使用在python 3中取代python 2 中的commands模块
参考:http://www.jb51.net/article/48086.htm
常用fork子进程执行shell命令,可以返回结果和返回值
举例:
只需要返回值
1
2
3
4
5
6
7
|
In [
6
]: retcode
=
subprocess.call(
'ls -l'
, shell
=
True
)
total
12
-
rw
-
rw
-
r
-
-
.
1
oldboy oldboy
239
Jan
19
21
:
13
access.log
-
rw
-
rw
-
r
-
-
.
1
oldboy oldboy
458
Jan
19
20
:
50
arp.txt
-
rw
-
r
-
-
r
-
-
.
1
oldboy oldboy
184
Jan
16
12
:
04
hosts
In [
7
]:
print
retcode
0
|
注意:
shell默认为False,等于 retcode = subprocess.call(["ls", "-l"]) 列表的形式第一个为命令,后面的都作为参数传递
需要返回值
1
2
|
child1
=
subprocess.Popen([
"cat"
,
"/etc/passwd"
], stdout
=
subprocess.PIPE)
child1.stdout.readlines()
|
常用:
file="get_ldap_zhname.sh"
1
2
3
|
child1
=
subprocess.Popen(
'sh '
+
file
+
' '
+
um, shell
=
True
, stdout
=
subprocess.PIPE)
status
=
child1.wait()
output
=
child1.stdout.read().strip()
|
3 comands模块(python 2中)
python自带模块
1
|
status,output
=
commands.getstatusoutput(
'cat /etc/passwd'
)
|
优点: 无论命令执行错误与正确,正确输出和错误输出都以字符串原样的字符串形式传递给output
4 multiprocessing模块
python自带模块
pool = multiprocessing.Pool(processes=4)
result_tmp.append(pool.apply_async(func, ( arg1,arg2,arg3)))
5 ping模块
pip install ping
result = ping.quiet_ping(addr, timeout=2, count=5, psize=64)
loss_rate=result[0]
max_time=result[1]
average_time=result[2]
常用处理(取float的位数和把None值 变为0表示不通):
loss_rate = result[0]
max_time = float('%.3f'% result[1]) if isinstance(result[1], float) else 0
#if max_time and average_time is None use 0
average_time = float('%.3f'% result[2]) if isinstance(result[2], float) else 0
6 random模块
python自带
import random
常用函数
a. random函数 生成一个0-1的随机数
1
2
|
In [
26
]: random.random()
Out[
26
]:
0.6289910862564466
|
b. sample 在一个列表(字符串)中随机抽样N个数,返回一个新的列表
1
2
3
4
|
In [
27
]: random.sample(
xrange
(
1
,
100
),
3
)
Out[
27
]: [
94
,
91
,
53
]
In [
28
]: random.sample(
'asdfasdf'
,
3
)
Out[
28
]: [
'f'
,
'a'
,
'a'
]
|
c. randint 函数,在指定的整数范围内(1<=x<=20),返回一个数
1
2
|
In [
29
]: random.randint(
1
,
20
)
Out[
29
]:
18
|
7 uuid模块
python自带
import uuid
常用: uuid1函数,通过mac和时间戳生成全球唯一的id
1
2
|
In [
49
]: uuid.uuid1()
Out[
49
]: UUID(
'cbb8c051-0929-11e6-9ba3-8c2937eebf3a'
)
|
(注意是 UUID类型,经常转化为str类型)
1
2
|
In [
50
]:
str
(uuid.uuid1())
Out[
50
]:
'cf296582-0929-11e6-8bbf-8c2937eebf3a'
|
8 hashlib 模块
常用md5函数 (常结合uuid来生成一个32位的随机数)
1
2
|
In [
48
]: hashlib.md5(
str
(uuid.uuid1())).hexdigest()
Out[
48
]:
'd4aacc5bb29a24fd9db8e2ea1bf53cb7'
|
9 时间模块 time, datetime timedelta
参考: http://cuidehua.blog.51cto.com/5449828/1767046
10 json模块
参考: http://cuidehua.blog.51cto.com/5449828/1767061
11 re 正则表达式模块
python自带
常用 判断一个字符串是否符合指定的表达式
1
2
3
4
5
6
7
8
|
In [
9
]:
import
re
In [
10
]: s
=
"10.1.1.223"
In [
11
]:
if
re.match(r
"10.1"
, s):
....:
print
"为10.1网段"
....:
else
:
....:
print
"不在10.1网段"
....:
为
10.1
网段
|
区别re.match() 和re.search()的区别
re.match(r“10.2,s”) 和 re.search(r”^10.2”,s) 是一样的
注:
1 匹配则返回对象本身,不匹配则放回None
2 match只匹配字符串的开始,如果开始不符合正则表达式,就返回None,而search匹配整个字符串,匹配到了则算匹配成功
12 collections 模块OrderedDict 函数
python自带内模块
作用: 定义有序字典,当有需要dict字典的key是有序的
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
In [
73
]:
from
collections
import
OrderedDict
In [
74
]: od
=
OrderedDict()
In [
75
]: od[
'key1'
]
=
'value1'
In [
76
]: od[
'key2'
]
=
'value2'
In [
77
]: od[
'key3'
]
=
'value3'
In [
78
]: od
Out[
78
]: OrderedDict([(
'key1'
,
'value1'
), (
'key2'
,
'value2'
), (
'key3'
,
'value3'
)])
In [
79
]: od.keys()
Out[
79
]: [
'key1'
,
'key2'
,
'key3'
]
In [
80
]:
for
k,v
in
od.ite
od.items od.iteritems od.iterkeys od.itervalues
In [
80
]:
for
k,v
in
od.items():
....:
print
k,v
....:
key1 value1
key2 value2
key3 value3
|
12 collections 模块Counter 函数
python再带内建(python 2.7 以上版本才有Counter函数)
Counter函数是属于字典的子类,所有也拥有字典相关的特性
重要用途: 返回列表(字符串)中元素出现的次数
1
2
3
|
In [
11
]:
from
collections
import
Counter
In [
12
]: l
=
[
'a'
,
'b'
,
'a'
,
'c'
,
'a'
,
'd'
]
In [
13
]: number_rep
=
Counter(l)
|
返回的是keys和次数组成的字典
1
2
3
4
|
In [
14
]: number_rep
Out[
14
]: Counter({
'a'
:
3
,
'b'
:
1
,
'c'
:
1
,
'd'
:
1
})
In [
15
]:
type
(number_rep)
Out[
15
]: collections.Counter
|
拥有字典的大部分属性函数
1
2
|
In [
16
]: number_rep[
"a"
]
Out[
16
]:
3
|
1
2
|
In [
18
]: number_rep.keys()
Out[
18
]: [
'a'
,
'c'
,
'b'
,
'd'
]
|
返回出现最多的key和次数组成的二元元组列表
1
2
|
In [
19
]: number_rep.most_common(
1
)
Out[
19
]: [(
'a'
,
3
)]
|
也有相加功能
1
2
3
4
5
|
In [
21
]: s
=
"efghfgfefda"
In [
22
]: Counter(s)
Out[
22
]: Counter({
'a'
:
1
,
'd'
:
1
,
'e'
:
2
,
'f'
:
4
,
'g'
:
2
,
'h'
:
1
})
In [
23
]: number_rep
+
Counter(s)
Out[
23
]: Counter({
'a'
:
4
,
'b'
:
1
,
'c'
:
1
,
'd'
:
2
,
'e'
:
2
,
'f'
:
4
,
'g'
:
2
,
'h'
:
1
})
|
注意:python 2.6环境中
pip install counter
from counter import Counter
13 linecache模块
python自带
import linecache
作用,读取文本行,大的文本,可以缓存到内存,下次再次读取直接从内存中拿取
用法:
返回所有行,以列表的形式
1
|
l_lines
=
linecache.getlines(
'filename'
)
|
返回指定的一行,返回字符串形式
1
|
s_line
=
linecache.getline(
'filename'
, linenumber).rstrip()
|
更新缓存,是直接从磁盘中读取文件,并更新内存中的缓存,返回列表形式的所有行
1
|
l_lines
=
linecache.updatecache(
'filename'
)
|
更新缓存 所有拥有缓存的
1
|
linecache.checkcache()
|
或者 指定更新的文件
1
|
linecache.checkcache(
'filename'
)
|
本文转自残剑博客51CTO博客,原文链接http://blog.51cto.com/cuidehua/1761922如需转载请自行联系原作者
cuizhiliang