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字符串,故需解码
server:远程执行系统命令返回结果
 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()
client:远程执行系统命令返回结果
原文地址:https://www.cnblogs.com/sunxiuwen/p/9347964.html