码迷,mamicode.com
首页 > 编程语言 > 详细

socket实现在python中调用操作系统的命令(subprocess)

时间:2019-10-22 13:10:27      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:accept   list   RoCE   window   listen   pen   操作   执行命令   方法   

在python中调用操作系统的命令
import os
import subprocess
# r = os.popen(‘ipconfig‘)
r = subprocess.Popen(ls,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)、
# subprocess.Popen(cmd,shell=True,subprocess.stdout,subprocess.stderr)
# cmd : 代表系统命令
# shell = True   代表这条命令是 系统命令,告诉操作系统,将cmd当成系统命令去执行
# stdout   是执行完系统命令之后,用于保存结果的一个管道
# stderr   是执行完系统命令之后,用于保存错误结果的一个管道
stdout = r.stdout.read().decode(gbk)
stderr = r.stderr.read().decode(gbk)
print(正确的返回结果:,stdout)
print(错误的返回结果:,stderr)
print(错误的返回结果:,stderr)            #保存变量的方法使得能得到两个错误的信息,否则只能得到一次错误的结果


#客户端发送一条命令用于调用服务器的系统命令
    # 客户端发送要执行命令
    # 服务器执行,执行完将结果返回给客户端
    # 客户端拿到结果呈现到用户眼前
#server层
import socket
import subprocess
sk = socket.socket()
sk.bind((127.0.0.1,8080))
sk.listen()
conn,addr = sk.accept()
while 1:
    cmd = conn.recv(1024).decode(utf-8)
    r = subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
    stdout = r.stdout.read()
    stderr = r.stderr.read()
    if stderr:
        conn.send(stderr)
    else:
        conn.send(stdout)
conn.close()
sk.close()

#client层
import socket
sk = socket.socket()
sk.connect_ex((127.0.0.1,8080))
while 1:
    cmd = input(请输入一个命令>>>)
    sk.send(cmd.encode(utf-8))
    #因为服务器是windows,执行的命令是GBK格式,所以传回来后需要进行解码,解码为GBK格式
    result = sk.recv(102400).decode(gbk)
    print(result)
sk.close()

 

socket实现在python中调用操作系统的命令(subprocess)

标签:accept   list   RoCE   window   listen   pen   操作   执行命令   方法   

原文地址:https://www.cnblogs.com/god-for-speed/p/11719027.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!