首页 > 其他分享 >10月20日subprocess模块

10月20日subprocess模块

时间:2023-10-20 15:44:06浏览次数:31  
标签:10 soc 20 socket subprocess PIPE True 客户端

目录

subprocess模块

这个模块的作用在于执行系统命令的模块

首先需要将这个模块导入

然后有一个固定的格式:

obj = subprocess.Popen('dir', shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)

这里的obj只是一个名可以修改,后面的是重点,Popen是一个标准的模块,用于创建新的进程并与其进行交互,可以这么理解它是用来执行系统命令、脚本或其他可执行文件。

这里的'dir'是windows里面的终端命令,注意这个终端命令要以字符串的形式

剩下的三个要是没有固定要求就锁死,就这么写

shell=Truesubprocess.Popen 的一个参数,用于指定是否通过 shell 来执行命令。当 shell=True 时,你可以将命令作为一个字符串传递,就像在命令行中一样。(这个固定写死)

subprocess.PIPE: 用于创建管道的格式,这个管道是将输出的结果保存到这里。(还有一个与之对应的格式暂时了解即可,subprocess.DEVNULLsubprocess 模块中的一个特殊文件句柄,通常用于在执行子进程时将标准输入、标准输出或标准错误重定向到一个空设备。)

标准输出 (stdout)用于正常的命令输出,通常包括程序的结果或一般信息。

标准错误 (stderr)用于报告错误消息和警告,通常包括程序执行时的问题。

实际操作一下

# subprocess执行系统命令的模块
import subprocess

#执行系统dir命令,把执行的正确结果放到管道中
obj = subprocess.Popen('dir', shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
#subprocess.PIPE就是用于存储正确信息的管道,然后这里的obj是此管道的名称

lis = subprocess.Popen('tasklist',shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
#这里的tasklist是Windows操作系统中的命令行工具。用于查看正在使用的软件情况以及名称


#拿到正确结果的管道,读出里面的内容
ss=obj.stdout.read()#这里把管道(dir)里的数据赋值给ss来进行读取
print(ss.decode('utf-8'))#这里再把数据解码成utf-8

ll = lis.stdout.read()#这里把管道(lis)里的数据赋值给ll进行读取
print(ll.decode('utf-8'))#这里再把数据解码成utf-8

结果如图

这里为什么还有解码呢?因为windows用的是gbk编码所以要把数据解码成utf-8编码

现在把这个模块运用到服务器与客户端中

首先是服务器

import socket
import subprocess
# 生成一个socket对象
soc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定地址跟端口号
soc.bind(('172.17.8.49', 8080))
# 开启服务器
soc.listen(3)

# 先来一个等待连接循环
while True:
    print('等待客户端连接')
    # 等候客户端来连接,conn相当于连接通道,addr是客户端的地址
    conn, addr = soc.accept()
    print('有个客户端连接上了', addr)  # 这里显示客户端的IP地址以及端口
    # 这里再写一个接收客户的循环
    while True:
        try:
            data = conn.recv(1024)  # 将收到的客户端数据赋值给data

            if len(data) == 0:
                break
            print(data)
            obj = subprocess.Popen(str(data,encoding='utf-8'),shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
            #这里建立一个存放命令的通道

            #这里把通道的数据读取然后赋值给shiyong
            shiyong = obj.stdout.read()
            #把执行的结果通过网络传给客户端
            conn.send(shiyong)
        except Exception:
            break#这里终止的是这个接收循环


    # 关闭与客户端的接口
    conn.close()


# 关闭服务器唯一的接口
soc.close()

结果

然后是客户端

import socket
soc = socket.socket()
soc.connect(('172.17.8.49', 8080))
while True:
    fasong = input('请输入要执行的命令:')
    #还需要将发送的数据进行编码
    soc.send(fasong.encode('utf-8'))
    #这里接收来自服务器传回来的命令结果
    data = soc.recv(1024)
    print(str(data, encoding='utf-8'))#尽量用utf-8来解码,能预防解码失误到时传输失败

结果

标签:10,soc,20,socket,subprocess,PIPE,True,客户端
From: https://www.cnblogs.com/slzjb/p/17777261.html

相关文章

  • Windows10一些琐事的命令
    WindowsSearch关闭web搜索结果,期望的是在本地搜索,不需要替自己去搜索web,一般自己用来打开程序REGADDHKCU\SOFTWARE\Policies\Microsoft\Windows\Explorer/vDisableSearchBoxSuggestions/tREG_DWORD/d0x1/f......
  • cuda visual studio integration vs2017安装失败
    版本不匹配?还是之前安装了旧的nvidia程序?参考1:https://zhuanlan.zhihu.com/p/150579521?utm_id=0()参考2:https://blog.csdn.net/qq_40963335/article/details/104907922(有用)删除任何已安装的nvidia相关程序包。再安装cuda就不报错了。 (以下信息仅适用于NsightVisualStudio功......
  • 10.20(异常总结)
    Java项目中常用的异常处理情况包括try-catch语句、throws关键字、自定义异常等。try-catch语句用于捕获和处理异常,可以有多个catch语句,需要注意顺序。throws关键字用于声明方法可能抛出的异常类型。自定义异常需要继承自Exception类或其子类。finally语句在异常处理中非常重要,可以......
  • 2023 中国 VR 50 强企业名单发布;OpenAI 新模型性能远低于预期丨 RTE 开发者日报 Vol.7
     开发者朋友们大家好:这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE (RealTimeEngagement) 领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编辑的个人观点,欢迎......
  • 10.19
    今天上了一整天的课,算法学习了哈夫曼树,在给树叶赋权值时,哈夫曼树能够更加便捷的进行生成树,普通树的存储,有着三种存储方法,双亲储存法,孩子储存发,还有双亲孩子储存法,孩子储存法我不太喜欢,在数组中链接链表,找双亲无比麻烦,双亲储存发虽然找孩子麻烦了一点但是我觉得还好,至少好写,双亲......
  • Axure RP 10 for mac:打造高保真交互原型设计的终极利器
    AxureRP10formac是一款功能强大的UI/UX设计工具,它可以帮助用户快速创建高保真的交互原型,帮助团队在早期阶段测试并验证产品或界面的想法。→→↓↓载AxureRP10forMacAxureRP10具有丰富的组件库和强大的交互功能,可以模拟各种复杂的交互效果,帮助用户在短时间内创建出令......
  • Adobe Acrobat Pro DC 2023:轻松驾驭PDF,开启高效工作新篇章 Mac+win版
    AdobeAcrobatProDC2023是Adobe公司推出的一款强大的PDF文档处理软件,它可以帮助用户轻松管理和编辑PDF文件,同时还提供了丰富的注释、高亮、添加文本等功能,使得用户可以在PDF文件中进行高效的沟通和协作。→→↓↓载AdobeAcrobatProDC2023mac/win版相较于其他PDF处理软......
  • Windows 10连接网络打印机报错“0x0000011b”的解决方法
    网络打印,win10/11都经常遇到这样那样的问题。今天遇到一台新装的windows10系统连接网络打印机报错:0x0000011b网上查了一圈,普遍说的是这个情况,微软官方介绍:通过命名管道使用RPC  也就是网上说的最多的注册表方式:WindowsRegistryEditorVersion5.00[HKEY_LOCAL_MACHINE\S......
  • Datalogic得利捷将亮相CeMAT ASIA 2023亚洲国际物流技术与运输系统展览会
    上海,2023年10月18日,Datalogic得利捷是一家专注在自动数据采集及工业自动化领域的全球领先供应商,将盛装出席物流行业盛会——CeMATASIA2023亚洲国际物流技术与运输系统展览会。本次展会将于2023年10月24-27日在上海新国际博览中心举办。展位W1 馆B5-2,Datalogic得利捷将携固定式条......
  • Win11_22H2_2023年10月累积更新
    大版本号:22H2内部版本号:22621.2428本系统镜像纯粹日常工作中自用并共享,基于微软官方原版镜像制作,目前只集成自应答文件和常用VC库,若你有好的建议或意见可发我邮箱;下载完记得验证hash值,以防翻车!文件说明:文件1.Win_11_business_22H2_22621.2428_x64_update2023.10.iso★微软官方商业......