模塊介紹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(); 執行命令 - 經過用戶名和密碼鏈接服務器