标签:data desktop 读写 use read 代码 tcpip 数据 pip
subprocess模块
它是可以远程操作主机,模拟shell命令
‘dir‘是windows上查看任务的命令
import subprocess obj = subprocess.Popen(‘dir‘, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) #Popen是模拟cmd命令,‘dir‘是windows上查看任务的命令,shell=True是指可以用shell命令了, 输出和错误,放到管道(PIPE)里 # print(obj.stdout.read().decode(‘gbk‘)) #打印输出的内容 # print(obj.stderr.read().decode(‘gbk‘)) #打印错误的内容 res = obj.stdout.read() + obj.stderr.read() #错误和输入放到一起给变量res print(res.decode(‘gbk‘)) #打印res
在linux里可以创建python脚本,写入
import subprocess obj = subprocess.Popen(‘ls;lsblk‘, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) #Popen是模拟cmd命令,‘dir‘是windows上查看任务的命令,shell=True是指可以用shell命令了, 输出和错误,放到管道(PIPE)里 # print(obj.stdout.read().decode(‘utf-8‘)) #打印输出的内容 # print(obj.stderr.read().decode(‘utf-8‘)) #打印错误的内容 res = obj.stdout.read() + obj.stderr.read() #错误和输入放到一起给变量res print(res.decode(‘utf-8‘)) #打印res
socket模块
服务端步骤:
1、socket创建一个套接字
2、bind绑定ip和port
3、listen使套接字变为可以被动连接
4、accept等待客户端的连接
5、recv/send接收发送数据
import socket #导入模块 server = socket.socket()#创建实例,传给server,默认TCPIP ipv4 server.bind((‘0.0.0.0‘, 8888))#0000代表暴露所有IP,或者冒号里边空着,也可以输入指定IP server.listen(5)#监听最大5个链接 print(‘等待电话。。。‘) conn, addr = server.accept()#链接和addr需要分别赋值,等待客户端连接,没有链接就等待 print(‘电话来了。。。‘) #服务器接收消息 data = conn.recv(1024) #接收消息,大小为1024 print(data.decode(‘utf-8‘)) #服务器发送消息 nfo = input(‘===>:‘) conn.send(info.encode(‘utf-8‘))
客户端步骤:
1、创建套接字
2、连接服务器
3、发送数据,最大接收1024字节
4、关闭套接字
import socket client = socket.socket() client.connect((‘localhost‘, 8888))#如果是远程链接要写IP #客户发送消息 info = input(‘===>:‘) client.send(info.encode(‘utf-8‘)) #客户接收消息 data = client.recv(1024) print(data.decode(‘utf-8‘))
先运行客户端,进入等待链接,然后运行服务端链接,输入聊天内容,回车发送,切换到客户端,回复收到的消息,这样就完成了聊天的过程,但是一人说一句后,我们看到程序结束了,那我们没聊够怎么办,对,加个循环。
我们在“服务器接收消息”和“客户端发送消息”之前加入while True:
并且下方整体缩进。
import socket #导入模块 server = socket.socket()#创建实例,传给server,默认TCPIP ipv4 server.bind((‘0.0.0.0‘, 8888))#0000代表暴露所有IP,或者冒号里边空着,也可以输入指定IP server.listen(5)#监听最大5个链接 print(‘等待电话。。。‘) conn, addr = server.accept()#链接和addr需要分别赋值,等待客户端连接,没有链接就等待 print(‘电话来了。。。‘) #服务器接收消息 while True: data = conn.recv(1024) #接收消息,大小为1024 print(data.decode(‘utf-8‘)) #服务器发送消息 info = input(‘===>:‘) conn.send(info.encode(‘utf-8‘))
import socket client = socket.socket() client.connect((‘localhost‘, 8888))#如果是远程链接要写IP #客户发送消息 while True: info = input(‘===>:‘) client.send(info.encode(‘utf-8‘)) #客户接收消息 data = client.recv(1024) print(data.decode(‘utf-8‘))
这样我们就可以尽情的发送消息了
不过,当我们什么也不输入那么,会发现程序卡住了,再输入的内容(酷酷酷酷酷),也无法发送了,针对此,我们再原代码的基础上,客户端和服务端的发送条件加入为空循环
那么运行后,输入为空回车,将会重新上输入
这个时候我们发现,客户端没有发消息的话,那么服务端将一直等待,无法发送,整个程序处在半双工的情况下,所以我们要改成全双工,可以自由发送,那么就需要创建函数进程了
服务端:
import socket import threading server = socket.socket() server.bind((‘0.0.0.0‘, 8888)) server.listen(5) print(‘等待电话。。。‘) conn, addr = server.accept() print(‘电话来了。。。‘) def recv(): while True: # 服务器接收消息 data = conn.recv(1024) print(data.decode(‘utf-8‘)) def send(): while True: # 服务器发送消息 info = input(‘===>:‘) if not info:continue conn.send(info.encode(‘utf-8‘)) t1 = threading.Thread(target=recv) t2 = threading.Thread(target=send) t1.start() t2.start()
客户端:
import socket import threading client = socket.socket() client.connect((‘localhost‘, 8888)) def send(): while True: # 客户发送消息 info = input(‘===>:‘) if not info:continue client.send(info.encode(‘utf-8‘)) def recv(): while True: #客户接收消息 data = client.recv(1024) print(data.decode(‘utf-8‘)) t1 = threading.Thread(target=send) t2 = threading.Thread(target=recv) t1.start() t2.start()
到此,一个聊天程序就基本成型了
进阶修炼:链接Linux,模拟远程控制
import socket import subprocess import threading server = socket.socket() server.bind((‘‘, 8888)) server.listen(5) print(‘等待电话.....‘) conn, addr = server.accept() print(‘电话来了......‘) while True: data = conn.recv(10240) cmd = subprocess.Popen(data.decode(‘utf-8‘), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) stdout = cmd.stdout.read() stderr = cmd.stderr.read() conn.send(stdout + stderr)
链接成功后,客户端输入的命令,可以得到相应的反馈结果
如:输入ls -l
例:通过读写复制文件
with open(r‘?C:\Users\逸轩\Desktop\w.txt‘, ‘rb‘)as f:#二进制读 data = f.read() with open(r‘a.txt‘, ‘wb‘)as f:#二进制写 f.write(data)
标签:data desktop 读写 use read 代码 tcpip 数据 pip
原文地址:https://www.cnblogs.com/liketimes/p/10028832.html