Python 모듈 기본 사항


모듈, 단일 코드를 사용하여 특정 기능을 구현하는 코드 모음입니다.

함수형 프로그래밍 및 프로세스 지향 프로그래밍과 유사하게 함수형 프로그래밍은 함수를 완성하고 다른 코드에서 호출할 수 있어 코드 재사용성과 코드 간 결합을 제공합니다. 복잡한 함수의 경우 여러 함수가 완료되어야 할 수 있습니다(함수는 서로 다른 .py 파일에 있을 수 있음). n개의 .py 파일로 구성된 코드 컬렉션을 모듈이라고 합니다.

예: os는 시스템 관련 모듈이고, file은 파일 작업과 관련된 모듈입니다.

모듈은

  • 맞춤형 모듈
  • 내장 모듈
  • 오픈 소스 모듈

사용자 정의 모듈

1 , 모듈 정의

시나리오 1:

시나리오 2:

시나리오 3:


2. 모듈 가져오기


Python이 점점 더 널리 사용되는 이유는 어느 정도 프로그래머에게 사용할 수 있는 많은 모듈을 제공한다는 사실에 달려 있습니다. 모듈을 사용하려면 모듈을 가져와야 합니다. 모듈을 가져오는 방법에는 여러 가지가 있습니다:

import modulefrom module.xx.xx import xxfrom module.xx.xx import xx as rename  
from module.xx.xx import *

가져오기 모듈은 실제로 Python 인터프리터에게 py 파일을 해석하라고 지시합니다

  • py 파일을 가져오면 인터프리터는 py 파일을 해석합니다
  • 패키지를 가져오면 인터프리터는 패키지 아래의 __init__.py 파일을 해석합니다

그래서 문제는 모듈을 가져올 때 어떤 경로를 기본으로 사용하느냐는 것입니다. 즉, sys.path

import sys
print sys.path
  
结果:

['E:\Python\\xc1\xb7\xcf\xb0', 'E:\Python', 'C:\Windows\SYSTEM32\python27.zip', 'D:\Install\Python\DLLs', 'D:\Install\Python\lib', 'D:\Install\Python\lib\plat-win', 'D:\Install\Python\lib\lib-tk', 'D:\Install\Python', 'D:\Install\Python\lib\site-packages']
sys.path 경로 목록에 원하는 경로가 없으면 sys.path.append('path')를 통해 추가할 수 있습니다.
os 모듈을 통해 다음과 같은 다양한 디렉터리를 얻을 수 있습니다.
import sys
import os

pre_path = os.path.abspath('../')
sys.path.append(pre_path)

오픈 소스 모듈

1. 다운로드 및 설치

다운로드 및 설치 방법에는 두 가지가 있습니다.

yum 
pip
apt-get
...
下载源码
解压源码
进入目录
编译源码    python setup.py build
安装源码    python setup.py install
참고: ​​소스 코드 설치를 사용할 경우 gcc 컴파일 및 Python 개발 환경을 사용해야 하므로 먼저 실행해야 합니다:
yum install gcc
yum install python-devel
或
apt-get python-dev
설치가 성공적으로 완료되면 모듈은 sys.path의 다음과 같은 디렉터리에 자동으로 설치됩니다. :
/usr/lib/python2.7/site-packages/

2. 모듈 가져오기

사용자 정의 모듈의 가져오기 방법과 동일

3. 모듈 paramiko

paramiko는 원격 제어에 사용되는 모듈입니다. 원격 서버에서 ansible 내의 패브릭 원격 관리는 paramiko를 사용하여 구현된다는 점을 언급할 가치가 있습니다.

1.

# pycrypto,由于 paramiko 模块内部依赖pycrypto,所以先下载安装pycrypto
 
# 下载安装 pycrypto
wget http://files.cnblogs.com/files/wupeiqi/pycrypto-2.6.1.tar.gz
tar -xvf pycrypto-2.6.1.tar.gz
cd pycrypto-2.6.1
python setup.py build
python setup.py install
 
# 进入python环境,导入Crypto检查是否安装成功
 
# 下载安装 paramiko
wget http://files.cnblogs.com/files/wupeiqi/paramiko-1.10.1.tar.gz
tar -xvf paramiko-1.10.1.tar.gz
cd paramiko-1.10.1
python setup.py build
python setup.py install
 
# 进入python环境,导入paramiko检查是否安装成功
다운로드 및 설치
#!/usr/bin/env python
#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();
import paramiko

private_key_path = '/home/auto/.ssh/id_rsa'
key = paramiko.RSAKey.from_private_key_file(private_key_path)

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('主机名 ', 端口, '用户名', key)

stdin, stdout, stderr = ssh.exec_command('df')
print stdout.read()
ssh.close()
import os,sys
import paramiko

t = paramiko.Transport(('182.92.219.86',22))
t.connect(username='wupeiqi',password='123')
sftp = paramiko.SFTPClient.from_transport(t)
sftp.put('/tmp/test.py','/tmp/test.py') 
t.close()


import os,sys
import paramiko

t = paramiko.Transport(('182.92.219.86',22))
t.connect(username='wupeiqi',password='123')
sftp = paramiko.SFTPClient.from_transport(t)
sftp.get('/tmp/test.py','/tmp/test2.py')
t.close()

上传或者下载文件 - 通过用户名和密码
import paramiko

pravie_key_path = '/home/auto/.ssh/id_rsa'
key = paramiko.RSAKey.from_private_key_file(pravie_key_path)

t = paramiko.Transport(('182.92.219.86',22))
t.connect(username='wupeiqi',pkey=key)

sftp = paramiko.SFTPClient.from_transport(t)
sftp.put('/tmp/test3.py','/tmp/test3.py') 

t.close()

import paramiko

pravie_key_path = '/home/auto/.ssh/id_rsa'
key = paramiko.RSAKey.from_private_key_file(pravie_key_path)

t = paramiko.Transport(('182.92.219.86',22))
t.connect(username='wupeiqi',pkey=key)

sftp = paramiko.SFTPClient.from_transport(t)
sftp.get('/tmp/test3.py','/tmp/test4.py') 

t.close()

上传或下载文件 - 通过密钥


내장 모듈

1. os

은 시스템 수준 작업을 제공하는 데 사용됩니다.

os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
os.chdir("dirname")  改变当前脚本工作目录;相当于shell下cd
os.curdir  返回当前目录: ('.')
os.pardir  获取当前目录的父目录字符串名:('..')
os.makedirs('dirname1/dirname2')    可生成多层递归目录
os.removedirs('dirname1')    若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
os.mkdir('dirname')    生成单级目录;相当于shell中mkdir dirname
os.rmdir('dirname')    删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
os.listdir('dirname')    列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
os.remove()  删除一个文件
os.rename("oldname","newname")  重命名文件/目录
os.stat('path/filename')  获取文件/目录信息
os.sep    输出操作系统特定的路径分隔符,win下为"\",Linux下为"/"
os.linesep    输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"
os.pathsep    输出用于分割文件路径的字符串
os.name    输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
os.system("bash command")  运行shell命令,直接显示
os.environ  获取系统环境变量
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所指向的文件或者目录的最后修改时间

2. sys

인터프리터 관련 연산 제공에 사용

sys.argv           命令行参数List,第一个元素是程序本身路径
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模块

Three, hashlib

암호화 관련 연산에 사용되며, md5 모듈과 sha 모듈을 대체하며 주로 SHA1, SHA224, SHA256, SHA384, SHA512, MD5 제공 알고리즘

import md5
hash = md5.new()
hash.update('admin')
print hash.hexdigest()
import sha

hash = sha.new()
hash.update('admin')
print hash.hexdigest()
import hashlib
 
# ######## md5 ########
 
hash = hashlib.md5()
hash.update('admin')
print hash.hexdigest()
 
# ######## sha1 ########
 
hash = hashlib.sha1()
hash.update('admin')
print hash.hexdigest()
 
# ######## sha256 ########
 
hash = hashlib.sha256()
hash.update('admin')
print hash.hexdigest()
 
 
# ######## sha384 ########
 
hash = hashlib.sha384()
hash.update('admin')
print hash.hexdigest()
 
# ######## sha512 ########
 
hash = hashlib.sha512()
hash.update('admin')
print hash.hexdigest()
위의 암호화 알고리즘은 여전히 ​​매우 강력하지만 여전히 결함이 있습니다. 즉, 크리덴셜 스터핑을 통해 되돌릴 수 있습니다. 따라서 암호화를 수행하기 전에 암호화 알고리즘에 사용자 정의 키를 추가해야 합니다.

import hashlib
 
# ######## md5 ########
 
hash = hashlib.md5('898oaFs09f')
hash.update('admin')
print hash.hexdigest()
는 충분히 멋지지 않나요? Python에는 내부적으로 키와 콘텐츠를 생성하고 처리한 다음 암호화하는 hmac 모듈도 있습니다
import hmac
h = hmac.new('wueiqi')
h.update('hellowo')
print h.hexdigest()