导航:首页 > 编程语言 > python网络io

python网络io

发布时间:2023-04-12 17:41:54

A. 用python打开文件总是出现IOError怎么回事

用python打开文件总是出现IOError的原因:

1.python ioerror的出现:打开一个不存在的文件,示例中有意输入了一个不存在的文件名,并试图打开它。程序找不到这个文件名所以引发了IOError

”Traceback (most recent call last): File "<stdin>", line 1, in <mole>IOError: [Errno 2] No such file or directory: 'a.txt'“

2.文件写入时遇到python error错误原因。有同学遇到了IOError Errno 0 错误的情况,在用a+方式打开文件,之后读取该文件内容。修改读取的内容后重新写入文件,在写入时程序也遇到了IOError错误。这时要注意在读取文件之后记得要把文件关闭,当你需要写入文件时,要再将文件以w+方式打开写入。加深学习Python open()函数文件打开、读、写基础操作,可以减少类似情况发生。

3.当你不能满足被访问文件所设置的权限时,也会引发IO Error错误,类似这样

”IOError: [Errno 13] Permission denied: 'c:/a.txt' python permission denied“

从字面意思来理解就可以知道原因了,是因为我们执行的命令(运行python文件等),没有权限,给一个超级管理员权限就可以了。

B. Python基础之:Python中的IO

IO就是输入和输出,任何一个程序如果和外部希望有交互的话,都需要使用到IO。相对于java而言,Python中的IO更加的简单,易用。
本文将会详细介绍Python中的IO操作。

linux中有三种标准输入输出,分别是STDIN,STDOUT,

STDERR,对应的数字是0,1,2。

STDIN是标准输入,默认从键盘读取信息;

STDOUT是标准输出,默认将输出结果输出至终端;

STDERR是标准错误,默认将输出结果输出至终端。

我们常用的 2>&1,指将标准输出、标准错误指定为同一输出路径 。

python中,我们可以使用print方法来输出信息。\

我们看下print函数的定义:

print函数将 objects 打印到 file 指定的文本流,以 sep 分隔并在末尾加上 end。 sep, end, file 和 flush 如果存在,那么必须以关键字参数的形式给出。

所有非关键字参数都会被转换为字符串,并会被写入到流,以 sep 分割,并在末尾加上 end。 sep 和 end 都必须为字符串;它们也可以为 None,这意味着使用默认值。 如果没有给出 objects,则 print() 将只写入 end。

file 参数必须是一个具有 write(string) 方法的对象;如果参数不存在或为 None,则将使用 sys.stdout。 由于要打印的参数会被转换为文本字符串,因此 print()不能用于二进制模式的文件对象。 对于这些对象,可以使用 file.write(...)。

输出是否被缓存通常决定于 file,但如果 flush 关键字参数为真值,输出流会被强制刷新。

可以看到print的输出格式还是比较简单的。我们接下来看一下怎么丰富输出的格式。

如果想要格式化字符串,可以在字符串的开始引号之前加上 f 或 F。
这样的话,我们可以直接在字符串中引入变量值,只需要把变量放在 { 和 } 中间即可。

除了在{ }中放入Python变量之外,还可以在其中放入函数:

在 ':' 后传递一个整数可以让该字段成为最小字符宽度。方便列对齐:

{ }中的变量后面还可以跟着转值符号:'!a' 表示应用 ascii() ,'!s' 表示应用 str(),还有 '!r' 表示应用 repr():

除此之外,str本身自带一个功能强大的format 函数:

调用此方法的字符串可以包含字符串字面值或者以花括号 {} 括起来的替换域,每个替换域可以包含一个位置参数的数字索引,或者一个关键字参数的名称。 返回的字符串副本中每个替换域都会被替换为对应参数的字符串值。

再看一个使用索引的例子:

看一个关键字的例子:

再看一个组合的例子:

还有非常复杂的组合的例子:

或者使用 '**' 符号将 table 作为关键字参数传递:

还可以使用n类型 '{:n}' 来格式化数字:

如果我们只是想要将Python对象转换为字符串,那么可以使用repr()或者str(), str() 函数是用于返回人类可读的值的表示,而 repr()是用于生成解释器可读的表示。
举个例子:

str对象还提供了一些对字符串进行手动格式化的方法:

字符串对象的 str.rjust()方法通过在左侧填充空格来对给定宽度的字段中的字符串进行右对齐。类似的方法还有 str.ljust()和 str.center()。
如果输入的字符串太长,它们不会截断字符串,而是原样返回。
如果想保证字符串的长度,则可以使用切片: x.ljust(n)[:n] 。
还可以使用str.zfill()来用0填充字符串:

% 也可以用来格式化字符串,给定 'string' % values,则 string 中的 % 实例会以零个或多个 values 元素替换。 此操作通常被称为字符串插值。

python中文件读取非常简单,使用open()方法即可。
open()会返回一个文件对象。我们看一下它的定义:

第一个参数是文件名。
第二个参数是文件打开的模式,可用的模式有:

默认模式为 'r' 。
看一个open文件的例子:

文件打开了,自然需要被关闭,所以我们需要显示调用 f.close() 方法:

有没有类似java中的try with resource的自动关闭文件的功能呢?
我们可以使用with,这样文件在使用完毕之后,会自动被关闭,非常的好用。

文件被关闭之后,如果想要再次读取,就会报错:

获取到文件对象之后,我们就可以调用文件中的方法了。

f.read(size) 会读取一些数据并将其作为字符串(在文本模式下)或字节串对象(在二进制模式下)返回。

size 是一个可选的数值参数。 当 size 被省略或者为负数时,将读取并返回整个文件的内容;当取其他值时,将读取并返回至多 size 个字符(在文本模式下)或 size 个字节(在二进制模式下)。 如果已到达文件末尾,f.read() 将返回一个空字符串 ('')。

f.readline() 从文件中读取一行;换行符(\n)留在字符串的末尾,如果文件不以换行符结尾,则在文件的最后一行省略。如果 f.readline() 返回一个空的字符串,则表示已经到达了文件末尾,而空行使用 '\n' 表示,该字符串只包含一个换行符。

还有一种更加简单的读取方法,就是从文件中遍历:

如果你想以列表的形式读取文件中的所有行,你也可以使用 list(f) 或 f.readlines()。
f.write(string) 会把 string 的内容写入到文件中,并返回写入的字符数。

如果是在文本模式下,那么在写入文件之前,需要把对象转换成为文本形式,我们可以使用str()来进行转换。

使用f.seek(offset, whence)可以定位文件指针的位置,然后后续会从该位置开始进行读取操作。

whence 的 0 值表示从文件开头起算,1 表示使用当前文件位置,2 表示使用文件末尾作为参考点。 whence 如果省略则默认值为 0,即使用文件开头作为参考点。

JSON是一个很方便进行信息交流的文件格式。我们看下怎么使用JSON来将对象转换为字符串:

mps是将对象转换为json str。 json还有一个mp方法,可以直接将对象存入到文件中。

要从文件中解析出json字符串,可以使用load:

JSON 中的键-值对中的键永远是 str类型的。当一个对象被转化为 JSON 时,字典中所有的键都会被强制转换为字符串。这所造成的结果是字典被转换为 JSON 然后转换回字典时可能和原来的不相等。换句话说,如果 x 具有非字符串的键,则有 loads(mps(x)) != x。

C. python语言基础知识是什么

如下:

一、Python语言基础

Python核心:Python数据基本运算、语句、容器、函数

Python 面向对象编程:OOA、OOD、OOP、天龙八部技能系统框架 设计 Python高级:模块、包、函数式编程、文件。

二、Python高级软件开发技术

Linux操作系统 :Linux常用命令、编辑工具、vim/Pycharm

数据结构与算法 :链表、栈和队列、树和二叉树、查找排序

IO网络编程:文件操作、字节流读写、网络协议、套接 字、TCP/UDP

并发编程:多进程、进程池、进程通信、多线程、线程锁、多任务并发、IO模型、协程

Python 正则表达式:正则表达式、贪婪模和非贪婪模式、re模块

MySQL基础:数据库应用、SQL语言、Mysql增删改查、 pymysql模块

三、Python Web全栈式工程师

HTML/CSS HTML5标签,CSS选择器,CSS样式属性以 及值

Java :JS流程控制,DOM,BOM,JQuery API

MySQL高级:MySQL索引、事务、引擎、优化、pymysql 模块使用

Python Django 框架:Django、模板、视图、模型、请求对象等

Ajax Ajax,:JSON, Jquery对Ajax的支持, 跨域访问

四、Python 爬虫

Redis:Redis、string、hash、list、set、zset、 Python与MySQL和Redis结合

爬虫、HTTP、BeautifulSoup,XPath,Scrapy其实无论是学习什么知识,都要有一个对学习目标的清楚认识。 只有这样才能朝着目标持续前进,少走弯路,从学习中得到不断的提升,享受python学习计划的过程。

D. python的问题

IDE选用这里推荐两款常用的 IDE,可以按照自己的条件和场景来选择。PyCharmPyCharm 是由 JetBrain 的人员制作的 IDE,该团队负责最着名的 Java IDE,IntelliJ IDEA之一。PyCharm 的界面和功能对于那些有使用过其他 JetBrain 产品的人来说,是完美的。 此外,如果您喜欢 IPython 或 Anaconda 发行版,那么 PyCharm 可以将其工具和库(如NumPyMatplotlib)集成在一起,从而让您可以使用数组查看器和交互式图表。Thonny现在的开发工具太多了,而且每个开发工具都致力于做成最好用最智能的工具,所以功能越堆越多,越怼越智能。安装这些开发工具比较烧脑,经常需要经过许多配置步骤。作为一个 Python 开发者来说,好多人光是这些配置都要弄半天。配置好之后,打开软件,发现满屏都是菜单、按钮,无从下手,学习这些功能使用又是一大难题。这是一款对初学者特别友好的开发 IDE,它是由爱沙尼亚的 Tartu 大学开发,十分易于上手,还支持插件。如果你有编程基础,会其他编程语言,那么建议你用Pycharm。如果你是编程小白,或者零基础上手,那么建议你用Thonny。入门首先要学习Python基础知识,直接上课程:Python 环境搭建Python 基础语法Python 变量与数据类型Python 流程控制Python函数Python 模块和包Python 数据结构--序列Python ListPython tupplePython 类与对象Python 字典Python 集合Python 函数的参数Python 高阶函数Python 输入输出Python 错误和异常Python 之引用Python 之迭代器Python 之装饰器Python NameSpace & ScopePython Standard Library 01Python Standard Library 02Python datetime 和 timePython 垃圾回收机制Python 到底是值传递还是引用传递Python 之对象的比较与拷贝进阶通过上面基础知识的学习,相信你已经知道Python是个什么玩意了,对它也有一个初步的了解,对它的入门知识点也有些印象了。这时候你需要进阶学习,在入门的基础上更进一步。下面就从 Python 模块、Python爬虫基础、Python Web开发、Python 数据库操作、Python 数据分析及数据科学、Python IO及异步、Python网络编程、Python图像处理、Python 办公、Python 机器学习、Python 可视化 这些Python的基础大类来进行深入学习。Python 模块Python os 模块详解Python shutil 模块Python sys 模块详解Python queue 模块详解Python collections 模块Python random 模块Python logging 模块详解Python 枚举Python json&picklepathlib 模块Python calendar 模块Python math 模块Python decimal 模块Python itertools 模块Python statistics 模块Python operator 模块Python paramiko 模块Python filecmp&difflib模块初识 Python 多线程Python 多线程之 threading 模块Python Queue 进阶用法Python multiprocessing 模块Python 线程池Python 多线程 EventPython爬虫基础爬虫介绍Python 爬虫之 urllib 包基本使用Python 用户登录 Flask-LoginPython Requests 库的基本使用Python Requests 库高级用法正则表达式XPath 和 lxml爬虫利器 Beautiful Soup 之遍历文档PyQuery 详解爬虫利器 Beautiful Soup 之搜索文档Selenium 环境配置Selenium详解Python Scrapy 爬虫框架及搭建Python Scrapy 项目实战PySpider框架的使用Scrapy 模拟登陆Python 解析 XML爬取微信公众号文章内容Python 爬取豆瓣电影 top 250Python newspaper 框架Python Web开发Web 开发 Flask 介绍Web开发 Jinja2模板引擎Flask 框架集成BootstrapWeb表单Flask数据持久化Web 开发 RESTfulPython Web开发 Django 简介Python Django 模型概述与应用HTTP 入门Python Web 开发之 JWT 简介Python Web开发 OAuth2.0 简介OAuth2.0 客户端实战Flask 单元测试Web 开发 Django 管理工具Web 开发 Django 模板Flask 项目结构Python 数据库操作Python 操作 Redis 数据库介绍Python 操作 SQLitePython 操作 MongoDB 数据库介绍Python 操作 MySQLPython SQLAlchemyPython 数据分析及数据科学数据分析之 Numpy 初步NumPy Ndarray 对象及数据类型NumPy 字符串操作NumPy 数学函数NumPy 统计函数NumPy 排序和筛选函数NumPy 位运算与算术函数数据分析之 pandas 初步NumPy 矩阵Numpy 中数组和矩阵的区别Python IO及异步文件读写StringIO & BytesIOPython asyncioPython异步之aiohttpPython网络编程TCP 编程UDP 编程Python图像处理图像库 PIL(一)图像库 PIL(二)图像库 PIL 实例—验证码去噪Python 办公Python 操作 ExcelPython 操作 WordPython 解析 PDFPython 操作 CSVPython 机器学习机器学习概览第 112 天:机器学习算法之蒙特卡洛Python XGBoost 算法项目实战三木板模型算法项目实战第116天:机器学习算法之朴素贝叶斯理论机器学习算法之 K 近邻第120天:机器学习算法之 K 均值聚类机器学习之决策树Python 可视化Python matplotlib introctionPython Matplotlib 进阶操作Seaborn-可视化统计关系Seaborn-可视化分类数据Seaborn-可视化数据集的分布实战Python的知识点学完了之后,并不代表学完了。这只能代表你会Python了,并不能表示你可以去找工作、你可以去接单了。因为你还缺乏实战练习,这个阶段需要你能从一个实际需求中进行建模,然后用Python去实现模型,得到预期的结果。这里列一些贴近工作生活实际的小项目,每个项目都能让你学习到如何进行需求建模,如何用代码去实现,去解决实际的问题。解析网络网盘链接:几行代码,网盘链接提头来见!揭露出轨女友:女友加班发自拍,男友用几行代码发现惊天秘密...爬取小程序:不能爬小程序,叫什么会爬虫解密当代女性胸围:我半夜爬了严选的女性文胸数据,发现了惊天秘密制作签名软件:牛逼!用Python为她设计专属签名软件!识别车牌:如何用 Python 识别车牌?追女神:用Python助女神发朋友圈下载知乎美女图片:Python 抓取知乎几千张小姐姐图片是什么体验?炒股赚钱:一份代码帮我赚了10万写小游戏:不到 150 行代码写一个 Python 版的贪吃蛇抠图无烦恼:Python装逼指南——五行代码实现批量抠图跟踪房价数据:看我如何抓取最新房价数据跟女友恶作剧:女友电脑私存撕葱帅照,我用python偷梁换柱...自动抢红包:强大!用 60 行代码自动抢微信红包下载B站视频:使用 Python 下载 B 站视频更多精彩可以关注我的专栏:我是@无欢不散,看到这里的朋友请帮忙点个赞,也可以关注 @无欢不散 不迷路。

E. 学python如何学

python要怎么学?让我们一起了解一下吧!
首先选择好python方向,比如说数据采集方向(爬虫),Web开发方向,人工智能方向等;接着学习python必学的内容,如Python的基础语言、学习Python的数据库编程;然后就可以根据书籍或教州派学视频,一步步来学习Python;最后去寻找合适的python项目实例,查漏补缺的同时提升自己的能力。如果是零基础仿者的初学者,建议选择培训班进行系统化学习,才能更快上手。
拓展:python必学的具体内容
1、Python的基础语言
从Python的基础语法开始学习,了解什么是Python的变量,什么是循环,什么是函数,什么是模块类等等。
2、Python的文件操作
学习完基础之后,进行一些简单的联系,如文件的操作。学习文件操作的时候,要学习文件的写入和读取以及了解各种文件之间的读写不同知识点。
3、Python的数据库编程
一般学习Mysql数据库的操作,包括数据库的增加数据,删除数据,以及查询数据以及对应的SQL语句等都是学习的重点。
4、Python的网络编程
要学习网络编程,一般需要了解三个方面:
1.写出基本备迹薯的TCP连接,知道编写TCP的各个步骤,例如创建socket、绑定port、端口复用等,对TCP稍微做了解,知道协议的每个字段,了解三次握手。
2.了解基本的服务器并发模型,例如多进程、多线程、IO复。
3.了解一些网络库例如twisted。
今天的分享就是这些,希望能帮助到大家!

F. python 运维常用脚本

Python 批量遍历目录文件,并修改访问时间

import os

path = "D:/UASM64/include/"
dirs = os.listdir(path)
temp=[];

for file in dirs:
temp.append(os.path.join(path, file))
for x in temp:
os.utime(x, (1577808000, 1577808000))
Python 实现的自动化服务器管理

import sys
import os
import paramiko

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

def ssh_cmd(user,passwd,port,userfile,cmd):

def ssh_put(user,passwd,source,target):

while True:
try:
shell=str(input("[Shell] # "))
if (shell == ""):
continue
elif (shell == "exit"):
exit()
elif (shell == "put"):
ssh_put("root","123123","./a.py","/root/a.py")
elif (shell =="cron"):
temp=input("输入一个计划任务: ")
temp1="(crontab -l; echo "+ temp + ") |crontab"
ssh_cmd("root","123123","22","./user_ip.conf",temp1)
elif (shell == "uncron"):
temp=input("输入要删除的计划任务: ")
temp1="crontab -l | grep -v " "+ temp + "|crontab"
ssh_cmd("root","123123","22","./user_ip.conf",temp1)
else:
ssh_cmd("lyshark","123123","22","./user_ip.conf",shell)

遍历目录和文件

import os

def list_all_files(rootdir):
import os
_files = []
list = os.listdir(rootdir) #列出文件夹下所有的目录与文件
for i in range(0,len(list)):
path = os.path.join(rootdir,list[i])
if os.path.isdir(path):
_files.extend(list_all_files(path))
if os.path.isfile(path):
_files.append(path)
return _files

a=list_all_files("C:/Users/LyShark/Desktop/a")
print(a)
python检测指定端口状态

import socket

sk = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sk.settimeout(1)

for ip in range(0,254):
try:
sk.connect(("192.168.1."+str(ip),443))
print("192.168.1.%d server open "%ip)
except Exception:
print("192.168.1.%d server not open"%ip)

sk.close()

python实现批量执行CMD命令

import sys
import os
import paramiko

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

print("------------------------------> ")
print("使用说明,在当前目录创建ip.txt写入ip地址")
print("------------------------------> ")

user=input("输入用户名:")
passwd=input("输入密码:")
port=input("输入端口:")
cmd=input("输入执行的命令:")

file = open("./ip.txt", "r")
line = file.readlines()

for i in range(len(line)):
print("对IP: %s 执行"%line[i].strip(' '))

python3-实现钉钉报警

import requests
import sys
import json

dingding_url = ' https://oapi.dingtalk.com/robot/send?access_token='

data = {"msgtype": "markdown","markdown": {"title": "监控","text": "apche异常"}}

headers = {'Content-Type':'application/json;charset=UTF-8'}

send_data = json.mps(data).encode('utf-8')
requests.post(url=dingding_url,data=send_data,headers=headers)

import psutil
import requests
import time
import os
import json

monitor_name = set(['httpd','cobblerd']) # 用户指定监控的服务进程名称

proc_dict = {}
proc_name = set() # 系统检测的进程名称
monitor_map = {
'httpd': 'systemctl restart httpd',
'cobblerd': 'systemctl restart cobblerd' # 系统在进程down掉后,自动重启
}

dingding_url = ' https://oapi.dingtalk.com/robot/send?access_token='

while True:
for proc in psutil.process_iter(attrs=['pid','name']):
proc_dict[proc.info['pid']] = proc.info['name']
proc_name.add(proc.info['name'])

判断指定端口是否开放

import socket

port_number = [135,443,80]

for index in port_number:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
result = sock.connect_ex((飗.0.0.1', index))
if result == 0:
print("Port %d is open" % index)
else:
print("Port %d is not open" % index)
sock.close()

判断指定端口并且实现钉钉轮询报警

import requests
import sys
import json
import socket
import time

def dingding(title,text):
dingding_url = ' https://oapi.dingtalk.com/robot/send?access_token='
data = {"msgtype": "markdown","markdown": {"title": title,"text": text}}
headers = {'Content-Type':'application/json;charset=UTF-8'}
send_data = json.mps(data).encode('utf-8')
requests.post(url=dingding_url,data=send_data,headers=headers)

def net_scan():
port_number = [80,135,443]
for index in port_number:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
result = sock.connect_ex((飗.0.0.1', index))
if result == 0:
print("Port %d is open" % index)
else:
return index
sock.close()

while True:
dingding("Warning",net_scan())
time.sleep(60)

python-实现SSH批量CMD执行命令

import sys
import os
import paramiko

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

def ssh_cmd(user,passwd,port,userfile,cmd):
file = open(userfile, "r")
line = file.readlines()
for i in range(len(line)):
print("对IP: %s 执行"%line[i].strip(' '))
ssh.connect(hostname=line[i].strip(' '),port=port,username=user,password=passwd)
cmd=cmd
stdin, stdout, stderr = ssh.exec_command(cmd)
result = stdout.read()

ssh_cmd("lyshark","123","22","./ip.txt","free -h |grep 'Mem:' |awk '{print $3}'")

用python写一个列举当前目录以及所有子目录下的文件,并打印出绝对路径

import sys
import os

for root,dirs,files in os.walk("C://"):
for name in files:
print(os.path.join(root,name))
os.walk()

按照这样的日期格式(xxxx-xx-xx)每日生成一个文件,例如今天生成的文件为2013-09-23.log, 并且把磁盘的使用情况写到到这个文件中。

import os
import sys
import time

new_time = time.strftime("%Y-%m-%d")
disk_status = os.popen("df -h").readlines()

str1 = ''.join(disk_status)
f = open(new_time+'.log','w')
f.write("%s"%str1)

f.flush()
f.close()

统计出每个IP的访问量有多少?(从日志文件中查找)

import sys

list = []

f = open("/var/log/httpd/access_log","r")
str1 = f.readlines()
f.close()

for i in str1:
ip=i.split()[0]
list.append(ip)

list_num=set(list)

for j in list_num:
num=list.count(j)
print("%s -----> %s" %(num,j))

写个程序,接受用户输入数字,并进行校验,非数字给出错误提示,然后重新等待用户输入。

import tab
import sys

while True:
try:
num=int(input("输入数字:").strip())
for x in range(2,num+1):
for y in range(2,x):
if x % y == 0:
break
else:
print(x)
except ValueError:
print("您输入的不是数字")
except KeyboardInterrupt:
sys.exit(" ")

ps 可以查看进程的内存占用大小,写一个脚本计算一下所有进程所占用内存大小的和。

import sys
import os

list=[]
sum=0

str1=os.popen("ps aux","r").readlines()

for i in str1:
str2=i.split()
new_rss=str2[5]
list.append(new_rss)
for i in list[1:-1]:
num=int(i)
sum=sum+num

print("%s ---> %s"%(list[0],sum))

关于Python 命令行参数argv

import sys

if len(sys.argv) < 2:
print ("没有输入任何参数")
sys.exit()

if sys.argv[1].startswith("-"):
option = sys.argv[1][1:]

利用random生成6位数字加字母随机验证码

import sys
import random

rand=[]

for x in range(6):
y=random.randrange(0,5)
if y == 2 or y == 4:
num=random.randrange(0,9)
rand.append(str(num))
else:
temp=random.randrange(65,91)
c=chr(temp)
rand.append(c)
result="".join(rand)
print(result)

自动化-使用pexpect非交互登陆系统

import pexpect
import sys

ssh = pexpect.spawn('ssh [email protected]')
fout = file('sshlog.txt', 'w')
ssh.logfile = fout

ssh.expect("[email protected]'s password:")

ssh.sendline("密码")
ssh.expect('#')

ssh.sendline('ls /home')
ssh.expect('#')

Python-取系统时间

import sys
import time

time_str = time.strftime("日期:%Y-%m-%d",time.localtime())
print(time_str)

time_str= time.strftime("时间:%H:%M",time.localtime())
print(time_str)

psutil-获取内存使用情况

import sys
import os
import psutil

memory_convent = 1024 * 1024
mem =psutil.virtual_memory()

print("内存容量为:"+str(mem.total/(memory_convent))+"MB ")
print("已使用内存:"+str(mem.used/(memory_convent))+"MB ")
print("可用内存:"+str(mem.total/(memory_convent)-mem.used/(1024*1024))+"MB ")
print("buffer容量:"+str(mem.buffers/( memory_convent ))+"MB ")
print("cache容量:"+str(mem.cached/(memory_convent))+"MB ")

Python-通过SNMP协议监控CPU
注意:被监控的机器上需要支持snmp协议 yum install -y net-snmp*

import os

def getAllitems(host, oid):
sn1 = os.popen('snmpwalk -v 2c -c public ' + host + ' ' + oid + '|grep Raw|grep Cpu|grep -v Kernel').read().split(' ')[:-1]
return sn1

def getDate(host):
items = getAllitems(host, '.1.3.6.1.4.1.2021.11')

if name == ' main ':

Python-通过SNMP协议监控系统负载
注意:被监控的机器上需要支持snmp协议 yum install -y net-snmp*

import os
import sys

def getAllitems(host, oid):
sn1 = os.popen('snmpwalk -v 2c -c public ' + host + ' ' + oid).read().split(' ')
return sn1

def getload(host,loid):
load_oids = Ƈ.3.6.1.4.1.2021.10.1.3.' + str(loid)
return getAllitems(host,load_oids)[0].split(':')[3]

if name == ' main ':

Python-通过SNMP协议监控内存
注意:被监控的机器上需要支持snmp协议 yum install -y net-snmp*

import os

def getAllitems(host, oid):

def getSwapTotal(host):

def getSwapUsed(host):

def getMemTotal(host):

def getMemUsed(host):

if name == ' main ':

Python-通过SNMP协议监控磁盘
注意:被监控的机器上需要支持snmp协议 yum install -y net-snmp*

import re
import os

def getAllitems(host,oid):

def getDate(source,newitem):

def getRealDate(item1,item2,listname):

def caculateDiskUsedRate(host):

if name == ' main ':

Python-通过SNMP协议监控网卡流量
注意:被监控的机器上需要支持snmp协议 yum install -y net-snmp*

import re
import os

def getAllitems(host,oid):
sn1 = os.popen('snmpwalk -v 2c -c public ' + host + ' ' + oid).read().split(' ')[:-1]
return sn1

def getDevices(host):
device_mib = getAllitems(host,'RFC1213-MIB::ifDescr')
device_list = []

def getDate(host,oid):
date_mib = getAllitems(host,oid)[1:]
date = []

if name == ' main ':

Python-实现多级菜单

import os
import sys

ps="[None]->"
ip=["192.168.1.1","192.168.1.2","192.168.1.3"]
flage=1

while True:
ps="[None]->"
temp=input(ps)
if (temp=="test"):
print("test page !!!!")
elif(temp=="user"):
while (flage == 1):
ps="[User]->"
temp1=input(ps)
if(temp1 =="exit"):
flage=0
break
elif(temp1=="show"):
for i in range(len(ip)):
print(i)

Python实现一个没用的东西

import sys

ps="[root@localhost]# "
ip=["192.168.1.1","192.168.1.2","192.168.1.3"]

while True:
temp=input(ps)
temp1=temp.split()

检查各个进程读写的磁盘IO

import sys
import os
import time
import signal
import re

class DiskIO:
def init (self, pname=None, pid=None, reads=0, writes=0):
self.pname = pname
self.pid = pid
self.reads = 0
self.writes = 0

def main():
argc = len(sys.argv)
if argc != 1:
print ("usage: please run this script like [./lyshark.py]")
sys.exit(0)
if os.getuid() != 0:
print ("Error: This script must be run as root")
sys.exit(0)
signal.signal(signal.SIGINT, signal_handler)
os.system('echo 1 > /proc/sys/vm/block_mp')
print ("TASK PID READ WRITE")
while True:
os.system('dmesg -c > /tmp/diskio.log')
l = []
f = open('/tmp/diskio.log', 'r')
line = f.readline()
while line:
m = re.match(
'^(S+)(d+)(d+): (READ|WRITE) block (d+) on (S+)', line)
if m != None:
if not l:
l.append(DiskIO(m.group(1), m.group(2)))
line = f.readline()
continue
found = False
for item in l:
if item.pid == m.group(2):
found = True
if m.group(3) == "READ":
item.reads = item.reads + 1
elif m.group(3) == "WRITE":
item.writes = item.writes + 1
if not found:
l.append(DiskIO(m.group(1), m.group(2)))
line = f.readline()
time.sleep(1)
for item in l:
print ("%-10s %10s %10d %10d" %
(item.pname, item.pid, item.reads, item.writes))
def signal_handler(signal, frame):
os.system('echo 0 > /proc/sys/vm/block_mp')
sys.exit(0)

if name ==" main ":
main()

利用Pexpect实现自动非交互登陆linux

import pexpect
import sys

ssh = pexpect.spawn('ssh [email protected]')
fout = file('sshlog.log', 'w')
ssh.logfile = fout

ssh.expect("[email protected]'s password:")

ssh.sendline("密码")

ssh.expect('#')
ssh.sendline('ls /home')
ssh.expect('#')

利用psutil模块获取系统的各种统计信息

import sys
import psutil
import time
import os

time_str = time.strftime( "%Y-%m-%d", time.localtime( ) )
file_name = "./" + time_str + ".log"

if os.path.exists ( file_name ) == False :
os.mknod( file_name )
handle = open ( file_name , "w" )
else :
handle = open ( file_name , "a" )

if len( sys.argv ) == 1 :
print_type = 1
else :
print_type = 2

def isset ( list_arr , name ) :
if name in list_arr :
return True
else :
return False

print_str = "";

if ( print_type == 1 ) or isset( sys.argv,"mem" ) :
memory_convent = 1024 * 1024
mem = psutil.virtual_memory()
print_str += " 内存状态如下: "
print_str = print_str + " 系统的内存容量为: "+str( mem.total/( memory_convent ) ) + " MB "
print_str = print_str + " 系统的内存以使用容量为: "+str( mem.used/( memory_convent ) ) + " MB "
print_str = print_str + " 系统可用的内存容量为: "+str( mem.total/( memory_convent ) - mem.used/( 1024*1024 )) + "MB "
print_str = print_str + " 内存的buffer容量为: "+str( mem.buffers/( memory_convent ) ) + " MB "
print_str = print_str + " 内存的cache容量为:" +str( mem.cached/( memory_convent ) ) + " MB "

if ( print_type == 1 ) or isset( sys.argv,"cpu" ) :
print_str += " CPU状态如下: "
cpu_status = psutil.cpu_times()
print_str = print_str + " user = " + str( cpu_status.user ) + " "
print_str = print_str + " nice = " + str( cpu_status.nice ) + " "
print_str = print_str + " system = " + str( cpu_status.system ) + " "
print_str = print_str + " idle = " + str ( cpu_status.idle ) + " "
print_str = print_str + " iowait = " + str ( cpu_status.iowait ) + " "
print_str = print_str + " irq = " + str( cpu_status.irq ) + " "
print_str = print_str + " softirq = " + str ( cpu_status.softirq ) + " "
print_str = print_str + " steal = " + str ( cpu_status.steal ) + " "
print_str = print_str + " guest = " + str ( cpu_status.guest ) + " "

if ( print_type == 1 ) or isset ( sys.argv,"disk" ) :
print_str += " 硬盘信息如下: "
disk_status = psutil.disk_partitions()
for item in disk_status :
print_str = print_str + " "+ str( item ) + " "

if ( print_type == 1 ) or isset ( sys.argv,"user" ) :
print_str += " 登录用户信息如下: "
user_status = psutil.users()
for item in user_status :
print_str = print_str + " "+ str( item ) + " "

print_str += "--------------------------------------------------------------- "
print ( print_str )
handle.write( print_str )
handle.close()

import psutil

mem = psutil.virtual_memory()
print mem.total,mem.used,mem
print psutil.swap_memory() # 输出获取SWAP分区信息

cpu = psutil.cpu_stats()
printcpu.interrupts,cpu.ctx_switches

psutil.cpu_times(percpu=True) # 输出每个核心的详细CPU信息
psutil.cpu_times().user # 获取CPU的单项数据 [用户态CPU的数据]
psutil.cpu_count() # 获取CPU逻辑核心数,默认logical=True
psutil.cpu_count(logical=False) # 获取CPU物理核心数

psutil.disk_partitions() # 列出全部的分区信息
psutil.disk_usage('/') # 显示出指定的挂载点情况【字节为单位】
psutil.disk_io_counters() # 磁盘总的IO个数
psutil.disk_io_counters(perdisk=True) # 获取单个分区IO个数

psutil.net_io_counter() 获取网络总的IO,默认参数pernic=False
psutil.net_io_counter(pernic=Ture)获取网络各个网卡的IO

psutil.pids() # 列出所有进程的pid号
p = psutil.Process(2047)
p.name() 列出进程名称
p.exe() 列出进程bin路径
p.cwd() 列出进程工作目录的绝对路径
p.status()进程当前状态[sleep等状态]
p.create_time() 进程创建的时间 [时间戳格式]
p.uids()
p.gids()
p.cputimes() 【进程的CPU时间,包括用户态、内核态】
p.cpu_affinity() # 显示CPU亲缘关系
p.memory_percent() 进程内存利用率
p.meminfo() 进程的RSS、VMS信息
p.io_counters() 进程IO信息,包括读写IO数及字节数
p.connections() 返回打开进程socket的nametples列表
p.num_threads() 进程打开的线程数

import psutil
from subprocess import PIPE
p =psutil.Popen(["/usr/bin/python" ,"-c","print 'helloworld'"],stdout=PIPE)
p.name()
p.username()
p.communicate()
p.cpu_times()

psutil.users() # 显示当前登录的用户,和Linux的who命令差不多

psutil.boot_time() 结果是个UNIX时间戳,下面我们来转换它为标准时间格式,如下:
datetime.datetime.fromtimestamp(psutil.boot_time()) # 得出的结果不是str格式,继续进行转换 datetime.datetime.fromtimestamp(psutil.boot_time()).strftime('%Y-%m-%d%H:%M:%S')

Python生成一个随机密码

import random, string
def GenPassword(length):

if name == ' main ':
print (GenPassword(6))

G. python程序运行后提示IOError: [Errno 22] Invalid argument 急啊!!!!

python程序运行后提示IOError: [Errno 22] Invalid argument是设置错误造成的,解决方法为:

1、根据提示找到错误代码处进行查看,是open函数出了问题。

H. python协程和异步IO——IO多路复用

C10k是一个在1999年被提出来的技术挑战,如何在一颗1GHz CPU,2G内存,1gbps网络环境下,让单台服务器链滚同时为1万个客户端提供FTP服务

阻塞式I/O(使用最扰掘多)、非阻塞式I/O、I/O复用、信号驱动式I/O(几乎不使用)、异步I/O(POSIX的aio_系列函数)

select、poll、epoll都是IO多路复用的机制。I/O多路复用就是通过一种机制,一个进程可以监听多个描述符,一旦,某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select、poll、epoll本质上都是同步I/O,因为他们都需要在读写时间就绪后负责进行读写,也就是说读写过程是阻塞的,而异步I/O无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用户空间
(1)select
select函数监视的文件描述符分3类,分别是writefds、readfds、exceptfds。调用select函数会阻塞,直到有描述符就绪(有数据可读、可写或者有except),或者超时函数返回。当select函数返回后可以通过遍历fdset来找到就绪的描述符。
select目前几乎在所有的平台上支持,其良好的跨平台支持也是它的一个优点。select的一个缺点在于单个进程能够监视的文件描述符的数量存在最大缓唤核限制,在Linux上一般为1024,可以通过修改宏定义甚至重新编译内核的方式提升这一限制,但是这样也会降低效率。
(2)poll
不同于select使用三个位图来表示三个fdset的方式,poll使用一个pollfd的指针实现。
pollfd结构包含了要监视的event和发生的event,不再使用select"参数-值"传递的方式。同时pollfd并没有最大数量限制(但是数量过大后性能也会下降)。和select函数一样,poll返回后,需要轮询pollfd来获取就绪的描述符。
从上面看,select和poll都需要在返回后通过遍历文件描述符来获取已经就绪的socket。事实上同时连接的大量客户端在同一时刻可能只有很少的处于就绪的状态,因此随着监视的描述符数量的增长,其效率也会线性下降
(3)epoll
epoll是在2.6内核中提出的,是之前的select和poll的增强版本。相对于select和poll来说,epoll更加领灵活,没有描述符限制。epoll使用一个文件描述符管理多个描述符,将用户关系的文件描述符的事件存放到内核的一个事件表中,这样在用户空间和内核空间的只需一次。

I. Python网络编程6-使用Pysnmp实现简单网管

  简单网络管理协议SNMP(Simple Network Management Protocol)用于网络设备的管理。SNMP作为广泛应用于TCP/IP网络的网络管理标准协议,提供了统一的接口,从而实现了不同种类和厂商的网络设备之间的统一管理。
  SNMP协议分为三个版本:SNMPv1、SNMPv2c和SNMPv3。

  SNMP系统由网络管理系统NMS(Network Management System)、SNMP Agent、被管对象Management object和管理信息库MIB(Management Information Base)四部分组成。

  SNMP查询是指NMS主动向SNMP Agent发送查询请求,如图1-3所示。SNMP Agent接收到查询请求后,通过MIB表完成相应指令,并将结果反馈给NMS。SNMP查询操作有三种:Get、GetNext和GetBulk。SNMPv1版本不支持GetBulk操作。

  不同版本的SNMP查询操作的工作原理基本一致,唯一的区别是SNMPv3版本增加了身份验证和加密处理。下面以SNMPv2c版本的Get操作为例介绍SNMP查询操作的工作原理。假定NMS想要获取被管理设备MIB节点sysContact的值,使用可读团体名为public,过程如下所示:

  SNMP设置是指NMS主动向SNMP Agent发送对设备进行Set操作的请求,如下图示。SNMP Agent接收到Set请求后,通过MIB表完成相应指令,并将结果反馈给NMS。

  不同版本的SNMP Set操作的工作原理基本一致,唯一的区别是SNMPv3版本增加了身份验证和加密处理。下面以SNMPv3版本的Set操作为例介绍SNMP Set操作的工作原理。
假定NMS想要设置被管理设备MIB节点sysName的值为HUAWEI,过程如下所示:

  SNMPv1和SNMPv2c的Set操作报文格式如下图所示。一般情况下,SNMPv3的Set操作信息是经过加密封装在SNMP PDU中,其格式与SNMPv2c的Set操作报文格式一致。

  SNMP Traps是指SNMP Agent主动将设备产生的告警或事件上报给NMS,以便网络管理员及时了解设备当前运行的状态。
  SNMP Agent上报SNMP Traps有两种方式:Trap和Inform。SNMPv1版本不支持Inform。Trap和Inform的区别在于,SNMP Agent通过Inform向NMS发送告警或事件后,NMS需要回复InformResponse进行确认。

  在Ensp中搭建网络环境,在R2上启用SNMP作为SNMP agent,Linux主机作为NMS;为方便观察SNMP报文格式,在R2使用SNMP的版本为v2c。

通过下面的Python脚本获取R2的系统信息与当前的主机名

运行结果如下

  在R2接口上抓包结果如下,Linux主机向R2的161端口发送SNMP get-request报文,可以看到SNMP使用的版本为v2c,设置的团体名为public,随机生成了一个request-id,变量绑定列表(Variable bindings),即要查询的OID,但Value为空;值得注意的是这些信息都是明文传输的,为了安全在实际环境中应使用SNMPv3。

通过下面的Python脚本获取R2的接口信息。

运行结果如下:

在R2接口抓包结果如下,getBuikRequest相比get-request设置了一个max-repetitions字段,表明最多执行get操作的次数。Variable bindings中请求的OID条目只有一条。

下面Python脚本用于设置R2的主机名为SNMPv2R2。

运行结果如下

在路由器上可以看到主机名有R2变为了SNMPv2R2。

get-response数据包内容与set-request中无异。

下面Python脚本用于接收,R2发送的Trap,并做简单解析。

先运行该脚本,之后再R2上手动将一个接口shutdown,结果如下:

接口上抓包结果如下,此时团体名用的是public,data部分表明是trap。

由于Ensp中的通用路由器认证算法只支持des56,而pysnmp不支持该算法,因此使用AR路由器配置SNMPv3。

使用下面Python脚本发送snmpv3 get报文获取设备系统信息。

抓包结果如下,首先发送get-resques进行SNMPv3认证请求,随机生成一个msgID,认证模式为USM,msgflgs中Reportable置1要求对方发送report,其他为置0,表示不进行加密与鉴权;另外安全参数,认证参数、加密参数都为空,此时不携带get请求数据。

路由器给NMS回复report,msgID与resquest一致,Msgflgs中各位都置0,同时回复使用的安全引擎,认证与加密参数为空,不进行认证与加密,因此能看到data中的数据。

AR1收到请求后进行回复,数据包中msgflags标志位中除reportable外其他位都置1,表示不需要回复,同时进行加密与鉴权。同样也可以看到认证用户为testuser,认证参数与加密参数都有填充,data部分也是同样加密。

参考:
什么是SNMP - 华为 (huawei.com)
AR100-S V300R003 MIB参考 - 华为 (huawei.com)
SNMP library for Python — SNMP library for Python 4.4 documentation (pysnmp.readthedocs.io)

J. python连接hbase报错ioerror

ioerror的具体原因可能有很铅老此多,如果在python连接hbase时出现这个错误,可以考虑以下几方面:一、检查hbase是槐迅否正常启动;二、检查python代码是否正含型确;三、查看zookeeper是否已经连接成功;四、查看端口是否占用,端口是否通。如果还不行,可以尝试更换python和hbase的版本号来解决问题。

阅读全文

与python网络io相关的资料

热点内容
java000 浏览:447
华为手机文件夹的字体颜色 浏览:632
安卓怎么换相机 浏览:933
华为相片文件夹怎么删除重复照片 浏览:314
plc编程视频教程大全 浏览:938
直播用哪个app播放背景音乐 浏览:850
点歌机系统app在哪里下载 浏览:609
javadate类型转换string 浏览:694
RPG游戏解压后乱码 浏览:988
无线通信的几个密钥算法 浏览:644
王者荣耀app数据修复在哪里 浏览:429
基于单片机饮水机温度控制系统的设计 浏览:455
c中委托被编译后的结构 浏览:152
飞燕app怎么注销账号 浏览:895
cad命令缩小 浏览:154
linux发展史 浏览:629
服务器选用什么CPU比较好 浏览:334
明星怎么宣传安卓 浏览:953
8255芯片编程 浏览:65
java文件bat运行 浏览:747