模块介绍python
自定义模块linux
内置模块docker
开源模块shell
1.模块简介编程
模块是一个包含全部你定义的函数和变量的文件,其后缀名是.py。模块能够被别的程序引入,以使用该模块中的函数等功能。这也是使用python标准库的方法。ubuntu
相似于函数式编程和面向过程编程,函数式编程则完成一个功能,其余代码用来调用便可,提供了代码的重用性和代码间的耦合。而对于一个复杂的功能来,可能须要多个函数才能完成(函数又能够在不一样的.py文件中),n个 .py 文件组成的代码集合就称为模块。vim
2.模块的引入windows
在Python中用关键字import来引入某个模块,好比要引用模块math,就能够在文件最开始的地方用import math来引入。在调用math模块中的函数时,必须这样引用:api
1
2
3
4
|
模块名.函数名
例:
import
math
import
sys
|
有时候咱们只须要用到模块中的某个函数,只须要引入该函数便可,此时能够经过语句bash
from 模块名 import 函数名1,函数名2....
例:
1
2
3
4
5
6
7
|
import
module
#从某个模块导入某个功能
from
module.xx.xx
import
xx
#从某个模块导入某个功能,而且给他个别名
from
module.xx.xx
import
xx as rename
#从某个模块导入全部
from
module.xx.xx
import
*
|
模块分为三种:
自定义模块
内置模块
开源模块
3.模块的安装
(1)yum install 模块名
(2)apt-get
pip3 install paramiko #paramiko 是模块名
(4)源码安装
1
2
3
4
5
6
|
须要编译环境:yum install python-devel gcc
下载源码包:wget http:
//xxxxxxxxxxx.tar
解压:tar -xvf xxx.tar
进入:cd xxx
编译:python setup.py build
安装:python setup.py install
|
1.在Python中,每一个Python文件均可以做为一个模块,模块的名字就是文件的名字。
例:
写一个模块(模块文件要和代码文件在同一目录下)
1
2
3
4
5
6
7
8
9
10
|
#vim moudle_test.py
#写入以下代码
#!/usr/bin/env python3
print (
'自定义 moudle'
)
#调用
#vim test.py
#!/usr/bin/env python3
#导入自定义模块
import
moudle_test
#执行test.py
|
2.模块文件为单独文件夹 ,文件夹和代码在同一目录下
__init__
导入模块其实就是告诉Python解释器去解释那个py文件
导入一个py文件,解释器解释该py文件
导入一个包,解释器解释该包下的 __init__.py 文件
3.sys.path添加目录
若是sys.path路径列表没有你想要的路径,能够经过 sys.path.append('路径') 添加。
经过os模块能够获取各类目录,例如:
1.os模块 提供系统级别的操做
os.getcwd() 获取当前工做目录,即当前python脚本工做的目录路径
1
2
3
|
>>> os.getcwd()
'/root'
>>>
|
os.chdir("目录名") 改变当前脚本工做目录;至关于linux下cd命令
1
2
3
4
|
>>> os.chdir(
'/usr/local'
)
>>> os.getcwd()
'/usr/local'
>>>
|
os.curdir 返回当前目录: ('.')
1
2
|
>>> os.curdir
'.'
|
os.pardir 获取当前目录的父目录字符串名:('..')
1
2
|
>>> os.pardir
'..'
|
os.makedirs('目录1/目录2') 可生成多层递归目录(至关于linux下mkdir -p)
1
2
|
>>> os.makedirs(
'/python/moudle/'
)
# ll /python/moudle/
|
os.removedirs('目录') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
1
2
3
|
>>> os.removedirs(
'/python/moudle'
)
#a目录中除了有一个b目录外,再没有其它的目录和文件。
#b目录中必须是一个空目录。 若是想实现相似rm -rf的功能可使用shutil模块
|
os.mkdir('目录') 生成单级目录;至关于shell中mkdir 目录
1
|
>>> os.mkdir(
'/python'
)
|
os.rmdir('目录') 删除单级空目录,若目录不为空则没法删除,报错;至关于shell中rmdir
1
2
3
4
5
|
>>> os.rmdir(
'/python'
)
>>> os.rmdir(
'/python'
)
Traceback (most recent call last):
File
"<stdin>"
, line
1
,
in
<module>
FileNotFoundError: [Errno
2
] No such
file
or
directory:
'/python'
|
os.listdir('目录') 列出指定目录下的全部文件和子目录,包括隐藏文件,并以列表方式打印
1
2
|
>>> os.listdir(
'/root'
)
[
'.Xauthority'
,
'yaoyao@192.168.42.51'
,
'.py.swp'
,
'.ssh'
,
'in.sh'
,
'1'
,
'IPy-0.81.tar.gz'
,
'Dockerssh'
,
'id_rsa.pub'
,
'psutil-2.0.0.tar.gz'
,
'.python_history'
,
'.bashrc'
,
'ansible'
,
'.bash_history'
,
'.vim'
,
'IPy-0.81'
,
'.pip'
,
'.profile'
,
'.ansible'
,
'python'
,
'.dockercfg'
,
'Docker'
,
'util-linux-2.27'
,
'.viminfo'
,
'util-linux-2.27.tar.gz'
,
'ubuntu_14.04.tar'
,
'__pycache__'
,
'psutil-2.0.0'
,
'xx.py'
,
'ip.py'
,
'DockerNginx'
,
'.cache'
,
'dict_shop.py'
]
|
os.remove()删除一个文件
1
|
>>> os.remove(
'/root/xx.py'
)
|
os.rename("原名","新名") 重命名文件/目录
1
2
3
4
5
|
>>> os.listdir(
'/python'
)
[
'oldtouch'
]
>>> os.rename(
'oldtouch'
,
'newtouch'
)
>>> os.listdir(
'/python'
)
[
'newtouch'
]
|
os.stat('path/filename') 获取文件/目录信息
1
2
|
>>> os.stat(
'newtouch'
)
os.stat_result(st_mode
=
33188
, st_ino
=
1048593
, st_dev
=
51713
, st_nlink
=
1
, st_uid
=
0
, st_gid
=
0
, st_size
=
0
, st_atime
=
1453442450
, st_mtime
=
1453442450
, st_ctime
=
1453442500
)
|
os.sep 输出操做系统特定的路径分隔符,win下为"\\",Linux下为"/"
1
2
3
|
>>> os.sep
'/'
>>>
|
os.linesep 输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"
1
2
|
>>> os.linesep
'\n'
|
os.pathsep 输出用于分割文件路径的字符串
1
2
|
>>> os.pathsep
':'
|
os.name 输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
1
2
|
>>> os.name
'posix'
|
os.system("pwd") 运行shell命令,直接显示
1
2
3
|
>>> os.system(
'pwd'
)
/
python
0
|
os.environ
1
2
|
>>> os.environ
environ({
'_'
:
'/usr/bin/python3'
,
'SSH_CONNECTION'
: 省略n个字符
|
os模块其余语法:
1
2
3
4
5
6
7
8
9
10
11
12
|
os.path模块主要用于文件的属性获取,
os.path.abspath(path) 返回path规范化的
os.path.
split
(path) 将path分割成目录和文件名二元组返回
os.path.
dirname
(path) 返回path的目录。其实就是os.path.
split
(path)的第一个元素
os.path.
basename
(path) 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.
split
(path)的第二个元素
os.path.exists(path) 若是path存在,返回True;若是path不存在,返回False
os.path.isabs(path) 若是path是绝对路径,返回True
os.path.isfile(path) 若是path是一个存在的文件,返回True。不然返回False
os.path.isdir(path) 若是path是一个存在的目录,则返回True。不然返回False
os.path.
join
(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径以前的参数将被忽略
os.path.getatime(path) 返回path所指向的文件或者目录的最后存取时间
os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间
|
二、sys模块 用于提供对解释器相关的操做
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
sys.argv 命令行参数List,第一个元素是程序自己路径
sys.modules 返回系统导入的模块字段,key是模块名,value是模块
sys.
exit
(n) 退出程序,正常退出时
exit
(0)
sys.version 获取Python解释程序的版本信息
sys.maxint 最大的Int值
sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform 返回操做系统平台名称
sys.stdout.write(
'please:'
)
val = sys.stdin.readline()[:-1]
sys.modules.keys() 返回全部已经导入的模块名
sys.modules.values() 返回全部已经导入的模块
sys.exc_info() 获取当前正在处理的异常类,exc_type、exc_value、exc_traceback当前处理的异常详细信息
sys.
exit
(n) 退出程序,正常退出时
exit
(0)
sys.hexversion 获取Python解释程序的版本值,16进制格式如:0x020403F0
sys.version 获取Python解释程序的
sys.api_version 解释器的C的API版本
sys.version_info
‘final’表示最终,也有’candidate’表示候选,serial表示版本级别,是否有后继的发行
sys.displayhook(value) 若是value非空,这个函数会把他输出到sys.stdout,而且将他保存进__builtin__._.指在python的交互式解释器里,’_’ 表明上次你输入获得的结果,hook是钩子的意思,将上次的结果钩过来
sys.getdefaultencoding() 返回当前你所用的默认的字符编码格式
sys.getfilesystemencoding() 返回将Unicode文件名转换成系统文件名的编码的名字
sys.setdefaultencoding(name)用来设置当前默认的字符编码,若是name和任何一个可用的编码都不匹配,抛出 LookupError,这个函数只会被site模块的sitecustomize使用,一旦别site模块使用了,他会从sys模块移除
sys.builtin_module_names Python解释器导入的模块列表
sys.executable Python解释程序路径
sys.getwindowsversion() 获取Windows的版本
sys.copyright 记录python版权相关的东西
sys.byteorder 本地字节规则的指示器,big-endian平台的值是’big’,little-endian平台的值是’little’
sys.exc_clear() 用来清除当前线程所出现的当前的或最近的错误信息
sys.exec_prefix 返回平台独立的python文件安装的位置
sys.stderr 错误输出
sys.stdin 标准输入
sys.stdout 标准输出
sys.platform 返回操做系统平台名称
sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.maxunicode 最大的Unicode值
sys.maxint 最大的Int值
sys.version 获取Python解释程序的版本信息
sys.hexversion 获取Python解释程序的版本值,16进制格式如:0x020403F0
|
https://pypi.python.org/pypi 是python的开源模块库,几乎涵盖了你想用python作的任何事情。 事实上每一个python开发者,只要注册一个帐号就能够往这个平台上传你本身的模块,这样全世界的开发者均可以容易的下载并使用你的模块。
那如何从这个平台上下载代码呢?
1.直接在上面这个页面上点download,下载后,解压并进入目录,执行如下命令完成安装
编译源码 python setup.py build 安装源码 python setup.py install
2.直接经过pip安装
pip3 install paramiko #paramiko 是模块名
pip命令会自动下载模块包并完成安装。
pip命令默认会链接在国外的python官方服务器下载,速度比较慢,你还可使用国内的豆瓣源,数据会按期同步国外官网,速度快好多
sudo pip install -i http://pypi.douban.com/simple/ paramiko --trusted-host pypi.douban.com # paramiko 是模块名
下载后,直接导入使用就能够,跟自带的模块调用方法无差,演示一个链接linux执行命令的模块
import paramiko ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect("192.168.224.101", 22, "root", " ") stdin, stdout, stderr = ssh.exec_command("df") print(stdout.read().decode("utf-8")) ssh.close()
输出:
文件系统 1K-块 已用 可用 已用% 挂载点 /dev/mapper/cl-root 17811456 7775084 10036372 44% / devtmpfs 488272 0 488272 0% /dev tmpfs 499300 0 499300 0% /dev/shm tmpfs 499300 19344 479956 4% /run tmpfs 499300 0 499300 0% /sys/fs/cgroup /dev/sda1 1038336 171112 867224 17% /boot tmpfs 99864 0 99864 0% /run/user/0
#coding:utf-8 import paramiko ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect('192.168.1.108', 22, 'alex', '123') stdin, stdout, stderr = ssh.exec_command('df') print(stdout.read()) ssh.close(); 执行命令 - 经过用户名和密码链接服务器