python之路day8
Posted tongyakoucun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python之路day8相关的知识,希望对你有一定的参考价值。
1.动态导入模块
lib = __import__("lib.aa")
c = lib.aa.C()
print(c.name)
print(lib.aa.C)
#下面为常用的方法
import importlib
lib = importlib.import_module(‘lib.aa‘)
print(lib.C())
2.断言
assiset 后面跟条件,如果成立就会执行下面的程序,如果不成立就会报异常
例1:
assert 6 == 6
print(‘6等于6‘)
上诉情况没问题 所以会打印下面的内容
例2:
assert type(2) is str
print(‘g is str‘)
上面的例子断言不成立所以会报错
Traceback (most recent call last):
File "/Users/luobiao/PycharmProjects/s14/day7/lib/aa.py", line 24, in <module>
assert type(2) is str
AssertionError
3.写一个简单的socketssh客户端
1)服务器端代码
import socket,os,time
#申明socket
server = socket.socket()
#进行ip绑定
server.bind((‘localhost‘,6767))
#进行监听
server.listen()
#进行循环等待,并接收连接和连接地址
while True:
conn,addr = server.accept()
print(conn,addr)
while True:
#进行数据接收
data = conn.recv(1024)
#进行数据打印,并进行解码
print(data.decode())
#调用os的popen模块,进行命令调用
d = os.popen(data.decode()).read()
length = str(len(d.encode()))
if len(d) == 0:
d = ‘命令错误,请重新输入.‘
#回传消息
conn.send(length.encode(encoding=‘utf-8‘))
#socket粘包 两次发送的信息会粘到一起,导致接收出错
#解决方案1:使用sleep睡眠0.5秒,让缓冲区超时 让两次数据不在同一个缓冲区
#time.sleep(0.5)
#解决方案2:
client_ack = conn.recv(1024)#接收一个数据,让客户端返回信息
print(client_ack.decode())
conn.send(d.encode(encoding=‘utf-8‘))
server.close()
2)客服端代码
import socket
#申明socket
client = socket.socket()
#指定连接地址和端口
client.connect((‘localhost‘,6060))
#循环发送给信息
while True:
#让用户输入信息,模仿ssh输入
message = input(‘>>: ‘)
#发送消息,将str类型的数据转换为bytes,使用encode进行转换
client.send(message.encode(encoding=‘utf-8‘))
#接收消息,并指定接收的最大数据量,单位为字节
length = client.recv(1024).decode()
client.send(‘收到大小‘.encode(encoding=‘utf-8‘))
print(length)
#打印消息并进行转码
#print(length.decode())
recevied_size = 0
while int(length)> recevied_size:
data = client.recv(1024)
recevied_size +=len(data.decode())
print(data.decode())
print(recevied_size)
else:
print(‘接收完毕‘)
#关闭链接
client.close()
以上是关于python之路day8的主要内容,如果未能解决你的问题,请参考以下文章