1.跨目录调用模块
#!/usr/bin/env python3
# this is CR7 scripts!
import importlib
aa = importlib.import_module('lib.aa')
obj = aa.C('123')
print(obj.NAME)
2.断言
#!/usr/bin/env python3
# this is CR7 scripts!
a = "123"
assert type(a) is str
print("yes")
########################
yes
注:相当于程度比较重的”if”,在用于一些绝对不可以出错的判断场景,比如一些重要应用有很多关联和关系的判断,如果不符合条件那么程序出错,不允许往下走
3.传文件(server)
#!/usr/bin/env python3
# this is CR7 scripts!
import socket,subprocess,os,hashlib
server = socket.socket()
server.bind(('localhost',9999))
server.listen()
while True:
conn,addr = server.accept()
print("new connection:",addr)
while True:
data = conn.recv(1024).decode()
if not data:
print("client is disconnect!")
break
cmd,filename = data.split()# 命令接受分组 get filename 写死了格式必须是get xxx
if cmd == "get":
if os.path.isfile(filename):
file_size = os.stat(filename)
m = hashlib.sha1()
conn.send(str(file_size.st_size).encode()) # 发送文件大小,单位字节
conn.recv(1024).decode() # wait client ack infomation...
with open(filename,'rb') as f:
for line in f:
m.update(line)
conn.send(line) # 传文件本身
print("file sha1:",m.hexdigest())
conn.send(m.hexdigest().encode())
server.close()
4.传文件(client)
#!/usr/bin/env python3
# this is CR7 scripts!
import socket,subprocess,os,hashlib
subprocess.getstatusoutput("rm -rf newfile")
client = socket.socket()
client.connect(('localhost',9999))
print(subprocess.getstatusoutput('ls -l')[1])
while True:
cmd = input("q[quit],:").strip()
if len(cmd) == 0:
continue
elif cmd == "q":
exit()
if cmd.startswith('get'):
client.send(cmd.encode())
server_responce_size = client.recv(1024).decode() # 收到文件的大小
client.send(b'ready to recv file...') # 确认收到,发送给服务端信息
file_total_size = int(server_responce_size)
received_size = 0
filename = cmd.split()[1]
f = open('newfile','wb')
m = hashlib.sha1()
while received_size < file_total_size:
if file_total_size - received_size > 1024:
size = 1024
else:
size = file_total_size - received_size
print("the last data size:",size)
data = client.recv(size)
received_size+=len(data)
m.update(data)
f.write(data)
print("size1:%s size2:%s"%(received_size,file_total_size))
else:
new_file_sha1 = m.hexdigest()
f.close()
server_file_sha1 = client.recv(1024).decode()
print("server:",server_file_sha1)
print("client:",new_file_sha1)
client.close()
5.多线程传消息(server)
#!/usr/bin/env python3
# this is CR7 scripts!
import socketserver,subprocess,os,hashlib
class MyTCPHandler(socketserver.BaseRequestHandler):
# 和客户端所有的交互都是在handler里处理的,每过来一个请求都会生成一个实例
def handle(self):
while True:
try:
print("from %s is connect..." %(HOST,PORT))
self.data = self.request.recv(1024).strip()
self.request.send(self.data.upper())
except ConnectionResetError:
print("It disconnect...",HOST)
break
if __name__ == "__main__":
HOST,PORT = 'localhost',9999
server = socketserver.ThreadingTCPServer((HOST,PORT),MyTCPHandler)
server.serve_forever()
6.多线程传消息(client)
#!/usr/bin/env python3
# this is CR7 scripts!
import socket
client = socket.socket()
client.connect(('localhost',9999))
while True:
msg = input(":".strip())
if len(msg) == 0:
continue
client.send(msg.encode())
data = client.recv(1024).decode()
print(data)
client.close()