python网络编程
subprocess模块
区别:subprocess模块与os.system(cmd)或os.popen(cmd)模块的区别是有返回值,会将报错信息接收
语法:ret_obj = subprocess(cmd, # 预在dos中执行的系统命令
shell=True, # 表示在Windows控制台
stdout=subprocess.PIPE, # 标准输出管道
stderr=subprocess.PIPE) # 标准错误管道
结果:执行完成之后,返回的是一个对象
对结果的读:msg = ret_obj.stdout.read() 得到的是一个bytes类型,因管道的机制是只读一次,读完后内存中就没有了,故需要用变量提前保存后,再发送
可视化需解码:msg = msg.decode('gbk') 因Windows默认位gbk编码
=====》
通过远程让主机执行相关命名,并将结果返回:
1 import socket 2 import subprocess 3 4 sk = socket.socket() 5 sk.bind(('127.0.0.1', 9999)) 6 sk.listen() 7 conn, add = sk.accept() 8 9 while 1: 10 msg_cmd = conn.recv(1024) 11 print(msg_cmd) 12 ret = subprocess.Popen(msg_cmd.decode('utf-8'), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 13 r = ret.stdout.read() 14 print(r.decode('gbk')) 15 conn.send(r) # windows 默认gbk,返回的是gbk字符串,故需解码
1 import socket 2 3 sk = socket.socket() 4 sk.connect(('127.0.0.1', 9999)) 5 6 while 1: 7 cmd = input('>>>>:') 8 sk.send(cmd.encode('utf-8')) 9 msg_r = sk.recv(2048) 10 print(msg_r.decode('gbk')) 11 sk.close()
人生苦短,我用python!