python - 远程主机执行命令练习(socket UDP + subprocess.Popen()) 练习1

环境是windows 环境.

server端:

import socket
import subprocess
ss = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

ip_port = ("127.0.0.1",8080)
ss.bind(ip_port)
while True:
    data,addr = ss.recvfrom(1024)

    re = data.decode()
    info = subprocess.Popen(re,shell=True,
                            stdin=subprocess.PIPE,
                            stderr=subprocess.PIPE,
                            stdout=subprocess.PIPE)
    if info.stderr.read():
        info2 = "输入错误!".encode("gbk")
    else:
        info2 = info.stdout.read()
    ss.sendto(info2,addr)

clinet端:

#coding:gbk
import socket
ip_port = ("127.0.0.1",8080)
cli = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
while True:
    data = input(">>>:")
    cli.sendto(data.encode("utf-8"),ip_port)
    data2,addr = cli.recvfrom(5120)
    data3 = data2.decode("gbk")
    print(data3)

反思:

  问题:经subprocess转换的数据编码为系统编码,而我当前用的是windows系统,所以默认编码为GBK编码,所以clinet端发送接收后的数据不能转换成UTF8的编码,只能转换为GBK编码.

在Linux环境没有测试. 

猜你喜欢

转载自www.cnblogs.com/Anec/p/9663235.html