美文网首页
17 | 常用内置模块介绍

17 | 常用内置模块介绍

作者: 运维开发_西瓜甜 | 来源:发表于2019-12-27 19:06 被阅读0次

一、sys

In [1]: import sys

In [2]: sys.version
Out[2]: '3.7.6 (tags/v3.7.6:43364a7ae0, Dec 19 2019, 00:42:30) [MSC v.1916 64 bit (AMD64)]'

In [3]: sys.version_info
Out[3]: sys.version_info(major=3, minor=7, micro=6, releaselevel='final', serial=0)

In [4]: print("python 主版本号:{}".format(py_version.major))
python 主版本号:3

In [5]: sys.platform  # 目前系统平台
Out[5]: 'win32'

关于系统平台

  • Windows --> 'win32'
  • Mac --> 'darwin'
  • Linux --> ''linux''

在命令行里,给脚本传参

在 CMD 中使用如下命 编辑一个 pos.py 文件

C:\Users\shark\python-code>notepad pos.py

并写入如下内容

# coding:gbk
import sys
print(sys.argv)

print("脚本的第一个参数:{}".format(sys.argv[1]))

print("脚本的第二个参数:{}".format(sys.argv[2]))
image.png

最后保存退出

输入如下命令,查看结果

C:\Users\shark\python-code>python pos.py lenovo  qf
['pos.py', 'lenovo', 'qf']
脚本的第一个参数:lenovo
脚本的第二个参数:qf

C:\Users\shark\python-code>


二、os

import os
# 获取当前工作目录,即当前python脚本工作的目录路径
In [3]: os.getcwd()
Out[3]: 'C:\\Users\\shark\\python-code'

# 切换当前脚本工作目录;相当于shell下cd
In [7]: os.chdir("D:\\")

In [8]: os.getcwd()
Out[8]: 'D:\\'     

# 创建单级目录,相当于 shell 中的 mkdir dirname
In [11]: os.mkdir("route-tab")

# 获取指定目录下的文件
# 点 代表当前目录
In [12]: os.listdir(".")
Out[12]:
['$RECYCLE.BIN',
 'Program Files',
 'Programs',
 'Python',
 'python-code',
 'route-tab',
 'System Volume Information']

In [13]:

处理路径

image.png
#coding:utf-8
import os
print(f"本文件的文件名{__file__}")
print(f"本文件的绝对路径{os.path.abspath(__file__)}")
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
print(f"本文件的上级目录{BASE_DIR}")


三、glob

glob 模块可以在指定的路径下,以模糊匹配的方式查找文件
* 代表零到多个的任意字符,就是所有的字符

In [14]: import glob

In [15]: glob.glob("*.py")
Out[15]: []

In [16]: glob.glob("./*.py")
Out[16]: []

In [17]: !echo #这个命令可以创建普通文件 > a.py

In [18]: !echo #这个命令可以创建普通文件 > b.py

In [19]: glob.glob("./*.py")
Out[19]: ['.\\a.py', '.\\b.py']

In [20]:


四、time 和 datetime

1. time 模块

时间戳类型

单位秒, 数据类型是 浮点型
是从 1970年 1 月 1 日 00:00:00 到当前的秒数

In [34]: time.time()
Out[34]: 1577577413.092128

结构化时间类型

In [35]: time.localtime()
Out[35]: time.struct_time(tm_year=2019, tm_mon=12, tm_mday=29, tm_hour=7, tm_min=58, tm_sec=36, tm_wday=6, tm_yday=363, tm_isdst=0)

In [36]: struct = time.localtime()

In [37]: struct.tm_year
Out[37]: 2019

字符串时间类型

可以实现输出指定格式的时间,数据类型是 字符串

In [38]: import time

In [39]: time.strftime("%F")
Out[39]: '2019-12-29'

In [40]: time.strftime("%T")
Out[40]: '07:53:27'

In [41]: time.strftime("%F_%T")
Out[41]: '2019-12-29_07:53:41'

In [42]: time.strftime("%Y_%m_%d_%H_%M_%S")
Out[42]: '2019_12_29_07_54_28'

格式化时间的变量:

格式 含义
%a 本地(locale)简化星期名称
%A 本地完整星期名称
%b 本地简化月份名称
%B 本地完整月份名称
%c 本地相应的日期和时间表示
%d 一个月中的第几天(01 - 31)
%H 一天中的第几个小时(24小时制,00 - 23)
%I 第几个小时(12小时制,01 - 12)
%j 一年中的第几天(001 - 366)
%m 月份(01 - 12)
%M 分钟数(00 - 59)
%p 本地am或者pm的相应符
%S 秒(01 - 61)
%U 一年中的星期数。(00 - 53星期天是一个星期的开始。)第一个星期天之前的所有天数都放在第0周。
%w 一个星期中的第几天(0 - 6,0是星期天)
%W 和%U基本相同,不同的是%W以星期一为一个星期的开始。
%x 本地相应日期
%X 本地相应时间
%y 去掉世纪的年份(00 - 99)
%Y 完整的年份
%Z 时区的名字(如果不存在为空字符)
%% ‘%’字符

奇异博士 程序暂停运行

In [43]: time.sleep(2)   # 程序休眠 2 秒钟

时间转换

image.png

将指定的时间戳转换为字符串类型的时间

In [8]: time.strftime("%F %T", time.localtime(18997989))
Out[8]: '1970-08-09 05:13:09'

In [9]: time.strftime("%F %T", time.localtime(198997989))
Out[9]: '1976-04-22 13:13:09'

In [10]: time.strftime("%F %T", time.localtime(1989979893))
Out[10]: '2033-01-22 12:11:33'

将字符串时间转换为时间戳

In [11]: st = "20200103T101000"

In [12]: time.mktime(time.strptime(st, "%Y%m%dT%H%M%S"))
Out[12]: 1578017400.0

In [13]:

2. datatime 时间计算

时间加减

In [16]: import datetime

# 三天后
In [17]: datetime.datetime.now() + datetime.timedelta(3)
Out[17]: datetime.datetime(2020, 1, 1, 8, 46, 48, 510787)

# 30 分钟后
In [18]: datetime.datetime.now() + datetime.timedelta(minutes=30)
Out[18]: datetime.datetime(2019, 12, 29, 9, 17, 17, 449121)

# 3 天前
In [19]: datetime.datetime.now() - datetime.timedelta(3)
Out[19]: datetime.datetime(2019, 12, 26, 8, 47, 26, 684824)

时间格式转换

>>> datetime.datetime.strftime(datetime.datetime.now(),'%Y-%m %T')
'2019-12 16:56:42'


五、subprocess 模块

allow_agent=False,look_for_keys=False
ssh.connect('192.168.1.100',username='admin', password='admin123', allow_agent=False,look_for_keys=False)
In [20]: import subprocess

In [21]: subprocess.getoutput("dir")
Out[21]: ' 驱动器 D 中的卷没有标签。\n 卷的序列号是 14B9-038E\n\n D:\\python-code 的目录\n\n2019/12/29  08:11    <DIR>          .\n2019/12/29  08:11    <DIR>          ..\n2019/12/27  22:34    <DIR>          .vscode\n2019/12/28  16:50            15,664 a.jpg\n2019/12/29  08:11                56 a.py\n2019/12/28  17:04    <DIR>          day02\n2019/12/29  08:32               237 test_path.py\n               3 个文件         15,957 字节\n               4 个目录 20,657,102,848 可用字节'

In [22]: ret = subprocess.getoutput("dir")

In [23]: type(ret)
Out[23]: str



六、paramiko 模块

连接路由器,并执行命令获取结果

import paramiko
# 创建SSH对象
ssh = paramiko.SSHClient()

# 信任对方的公钥
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

# 连接到路由器
ssh.connect(hostname='192.168.1.100', username='admin',
password='admin123', allow_agent=False,look_for_keys=False)

# 执行命令
_,sout,_ = ssh.exec_command("show ip interface")

# 获取结果,并转换成列表
sout.readlines()

---------------------------- 以下操作适用于 连接 Linux 系统 ----------------------------

1. 用户名密码方式执行远程主机命令和获取命令执行结果

image.png

3 免密方式执行远程主机命令

一定要先建立公钥信任

ssh-copy-id 服务器用户名@服务器 IP

import paramiko
# 创建SSH对象
ssh = paramiko.SSHClient()

# 信任对方的公钥
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())


# 创建一个自己当前用户的私钥对象

private_key = paramiko.RSAKey.from_private_key_file('/Users/yanshunjun/.ssh/id_rsa')



# 连接服务器
ssh.connect(hostname='10.18.46.104', port=22,
            username='root',  # 服务器端的用户
            pkey=private_key  # 本地用户的私钥对象
            )

# 执行命令
stdin, stdout, stderr = ssh.exec_command('df -P')

# 获取命令结果
result = str(stdout.read(), encoding='utf-8')

# 关闭连接
ssh.close()

4 上传下载文件

基于公钥秘钥上传下载

import paramiko

# 下面的命令可以快速创建密钥对,并用 -t 指定了算法类型为 ecdsa
## ssh-keygen -t ecdsa -N "" 
## ssh-copy-id -i ~/.ssh/id_ecdsa.pub -f root@172.16.153.10

# 创建一个本地当前用户的私钥对象
private_key = paramiko.ECDSAKey.from_private_key_file('/Users/yanshunjun/.ssh/id_ecdsa')

# 创建一个传输对象
transport = paramiko.Transport(('10.18.46.104',22))

# 使用刚才的传输对象创建一个传输文件的的连接对象
transport.connect(username='root', pkey=private_key)

sftp = paramiko.SFTPClient.from_transport(transport)

# 将location.py 上传至服务器 /tmp/test.py
sftp.put('回顾', '/tmp/回顾.txt')

# 将远程主机的文件 /tmp/test.py 下载到本地并命名为  some.py
sftp.get('/tmp/回顾.txt', 'some.txt')

transport.close()

相关文章

网友评论

      本文标题:17 | 常用内置模块介绍

      本文链接:https://www.haomeiwen.com/subject/jgeroctx.html