Python相关的基础模块

Python相关的基础模块

在编写远程控制工具之前,先要介绍用Python编写远程控制工具时所需要的 相关模块,为接下来编写工具打下基础。

1.subprocess模块

subprocess模块的主要作用是执行外部的命令和程序。当我们运行Python的时 候,其实也是在运行一个进程,而用subprocess模块可以创建一个子进程来执行命 令。

subprocess模块包含许多创建子进程的函数,这些函数分别以不同的方式创建 子进程,我们可以根据需要来从中选取一个使用。另外,subprocess还提供了一些 管理标准流(standard stream)和管道(pipe)的工具,从而实现在进程间使用文 本通信。

(1)subprocess.call(args ,* ,stdin=None ,stdout=None ,stderr=None, shell=False ,cwd=None ,timeout=None)

其中,args参数可以接收一个数组或字符串来作为运行命令。若args为数组, 则需要将命令和参数分开,否则会出现No such file or directory错误。

当args接收的参数为数组,且格式正确时,会输出命令执行结果并返回0:

 

a94ad871d36b41f1b43f8953912a3e3b.png

当args接收的参数为数组,但是命令和参数没有分开时,会报错:

 

 

 

51ba5911c29041fdaf691cc68717a912.png

 

若args接收的参数为字符串时,需要让shell为True 。这样subprocess.call()   函数会把接收到的字符串当作命令并调用shell去执行,成功执行后返回执行结果 并返回0 ,如下所示:

 

644e6326f2ed45dbbcdf123354e4c54a.png仔细观察会发现subprocess.call() 函数在执行完由args指定的命令后,会有 返回值0 。这里返回值为0 ,就表示命令执行成功(return code ,0表示成功,非0  表示失败)。

stdin 、stdout 、stdeer分别表示程序的标准输入、输出、错误句柄。它们可以  是PIPE 、文件描述符或文件对象,默认值为None ,表示从父进程继承。本章不会 用到这几个参数,所以不展开讲解。

(2)subprocess.check_call(args ,* ,stdin=None ,stdout=None, stderr=None ,shell=False ,cwd=None ,timeout=None)

该函数与subprocess.call() 函数类似,不同之处在于subprocess.check_call会 对返回值进行检查。如果返回值非0 ,则会抛出CallProcessError异常。

subprocess.CalledProcessError异常包括returncode 、cmd 、output等属性,其中

 

 

 

 

returncode是子进程的退出码,cmd是子进程的执行命令,output为None 。具体使 用案例如下所示。

当subprocess.call执行成功时,会显示执行结果并返回0:

e89b532be6414a74942e933eeba8527e.png

当subprocess.call执行失败时,会抛出CallProcessError异常:

可以通过try …except …语句来捕获CallProcessError异常,并分别打印输出 returncode 、cmd 、output的内容:

82a3ce4172684de08ab733594fc93f74.png

(3)subprocess.check_output(args ,* ,stdin=None ,stderr=None, shell=False ,cwd=None ,encoding=None ,errors=None,

Universal_newlines=None ,timeout=None ,text=None)

 

 

 

 

subprocess.check_output() 函数与前面两个函数的主要区别在于它会以字符 串形式返回执行结果的输出。这个函数同样会进行返回值检查,若returncode不为 0 ,则会抛出subprocess.CalledProcessError异常,效果如下所示:

164fb90db8194636ac2f9d7e3b6cbfaf.png

2.Struct模块

接下来,我们介绍另一个模块—— Struct模块。这个模块主要用于解决Socket 传输数据时粘包的问题。在Python中只定义了6种数据类型:数字、字符串、列  表、元组、字典、集合,但是没有定义字节类型的数据,因此在Socket数据传输 中需要转换为字节流。

在传送文件前,通过这个模块将文件的属性(文件大小)按照指定长度转换 打包,发送给对端计算机。对端计算机先接收这个固定长度的字节内容来查看接 下来要接收的文件的大小是多少,那么最终接收的数据只要达到这个大小,就说 明文件接收完毕,以此解决Socket文件传输粘包问题。

这里用到的函数主要为pack() 、unpack() 和calcsize() 。转换的操作格 式如表11-1所示。

表11-1    format格式

 

 

 

 

 

5fec1a9a50fb4b0996684ad3a9aa9192.png

(1)struct.pack(format ,v1 ,v2 ,...)

该方法返回一个bytes对象,其中包含格式字符串format以及打包的值v1, v2 , ⅆ , 参数个数必须与格式字符串所要求的值完全匹配,如下所示:

 

edc984785aa942b49ee15d39a1a509ec.png

(2)struct.unpack(format ,buffer)

该方法根据格式字符串format从缓冲区buffer解包(假定是由

pack(format ,... )打包)。结果为一个元组,即使其只包含一个条目,如下所 示:

6d92c5d6e6d34b9889c53f4733a9b946.png

 

 

 

 

(3)struct.calcsize(format)

该方法计算格式字符串所对应的结果的长度,如下所示:

7fb36945d59148d78819b5d3821bf34e.png

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/380489.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

32串口数据包

目录 一.数据包格式 (1)HEX数据包 (2)文本数据包 二.代码实现 (1)串口收发HEX数据包 (2)串口收发文本数据包(该程序没有写出来,暂时找不到错误,以后再看)…

蓝桥杯每日一练(python)B组

###来源于dotcpp的蓝桥杯真题 题目 2735: 蓝桥杯2022年第十三届决赛真题-取模&#xff08;Python组&#xff09; 给定 n, m &#xff0c;问是否存在两个不同的数 x, y 使得 1 ≤ x < y ≤ m 且 n mod x n mod y 。 输入格式&#xff1a; 输入包含多组独立的询问。 第一…

浅谈应该遵守的伦敦银交易规则

做伦敦银投资的朋友应遵守伦敦银交易规则&#xff0c;伦敦银交易规则不是指那些伦敦银交易技巧&#xff0c;而是在这个市场中要遵循的一些约定&#xff0c;下面我们就来讨论一下。 风险管理。风险管理即指投资者控制自己一笔乃至整体交易的风险&#xff0c;没有风险管理意识的投…

技术精英求职必备:Java开发工程师简历制作全指南

投简历找工作嘛&#xff0c;这事儿其实就跟相亲差不多&#xff0c;得让对方一眼就看上你。 在这场职场的‘相亲’中&#xff0c;怎样才能让你的简历脱颖而出&#xff0c;成为HR眼中的理想‘对象’呢&#xff1f;来&#xff0c;我给你支几招&#xff0c;让你的简历更吸引人。 …

前端又又出新框架,这次没有打包了

最近&#xff0c;前端开发领域又迎来了一个新框架——ofa.js。它的独特之处在于&#xff0c;不依赖于现有的 nodes/npm/webpack 前端开发工作流程。与jQuery类似&#xff0c;只需引用一个脚本&#xff0c;您就能像使用React/Vue/Angular一样轻松地开发大型应用。 极易上手 如果…

八卦图与二进制

名称二进制乾111坤000震100艮001离101坎010兑110巽011 1.卦象从下往上排&#xff0c;称为初爻、二爻、上爻&#xff0c;长线为1&#xff0c;短线为0&#xff0c;可以根据卦象记忆对应的二进制&#xff0c;二进制数也从下往上排。 2.注意&#xff1a;在使用二进制时&#xff0…

【精选】java初识多态 多态调用成员的特点

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏…

SQL拆分字段内容(含分隔符)

问题描述&#xff1a; 在做数据迁移的过程中&#xff0c;我们希望对表中的某个字段根据分隔符进行拆分&#xff0c;得到多条数据&#xff0c;原代码有点意思&#xff0c;因此记录一下。 我们假设某条数据如下&#xff1a; IDSTRS1公司名称不能小于四个字&#xff0c;行业类别…

Unity学习笔记之【IK反向动力学操作】

反向动力学Inverse Kinematics 反向动力学&#xff0c;简称IK。相较于正向动力学&#xff0c;反向动力学旨在子级对父级产生的影响。 使用IK&#xff0c;可以实现根据目标位置或方向来计算并调整角色的关节&#xff08;骨骼&#xff09;链&#xff0c;以使角色的末端&#xff…

关节点检测

https://www.bilibili.com/video/BV19g4y1777q/?p2&spm_id_frompageDriver 关节点检测全流程 YOLO:单阶段&#xff0c;快&#xff1b; MMPose&#xff1a;双阶段&#xff0c;准&#xff1b; 标注工具Labelme 用Labelme标注样本数据集

FastDFS 分布式集群搭建详解

文章目录 前言1、整体架构2、安装配置FastDFS集群2.1 配置tracker2.2 配置storage 3、启动集群4、查看集群情况5、nginx配置5.1 配置storage的四台机器的nginx5.2 配置tracker的两台机器的nginx5.3 配置统一入口 前言 阅读本文章之前请先看上一篇单机版FastDFS安装配置详解&am…

为什么在产品设计和制造过程中要采用FMEA——SunFMEA软件

在产品设计和制造过程中&#xff0c;FMEA是一种非常重要的工具&#xff0c;用于评估潜在的故障模式及其对产品性能的影响。通过分析产品设计或流程中可能出现的故障模式&#xff0c;并评估其对产品性能和客户满意度的潜在影响&#xff0c;来预测和防止产品在生产和运行过程中出…

深入解析Linux中HTTP代理的工作原理

亲爱的Linux探险家们&#xff0c;准备好一起探索HTTP代理背后的神秘面纱了吗&#xff1f;在这个数字世界里&#xff0c;HTTP代理就像是一个神秘的中间人&#xff0c;默默地在你和互联网之间穿梭&#xff0c;为你传递信息。那么&#xff0c;这个神秘的中间人到底是如何工作的呢&…

vue3 的setup和生命周期

vue3 的setup和生命周期 许多文章认为setup执行时间在beforeCreate 和created 之间&#xff0c;但是通过实际测试发现setup调用在beforecreate之前。 export default {beforeCreate() {console.log(beforeCreate running....);},created() {console.log("created runnin…

制度下降算法c语言

#include<stdio.h> #include<string.h> int location0; //遍历字符串的当前位置 char arr[20]"idid*id#"; void error(); //错误提示函数 /* 每一个非终结符都构造一个函数 */ void E(char t); void Ep(char t); void T(char t); void Tp(char t);…

[职场] 公务员面试停顿磕巴常见吗 #学习方法#知识分享#知识分享

公务员面试停顿磕巴常见吗 面试时说话磕巴简直是太常见了&#xff0c;对于一个新问题&#xff0c;让人在短时间内&#xff0c;并且仅仅是三分钟内&#xff0c;就组织起一个答案&#xff0c;还无法全部打手稿&#xff0c;这对于连上个讲台都会脸发红的人来说&#xff0c;简直是一…

【51单片机Keil+Proteus8.9】门锁控制电路

门锁控制电路 二、设计思路 电路设计 1.电源部分&#xff1a;使用BATTERY为整个电路提供电源&#xff0c;可以在电路中加入一个电 源开关&#xff0c;以便控制电源的开启和关闭。 2.处理器部分&#xff1a;使用AT89C51芯片作为主处理器&#xff0c;通过编写程序实现门锁的 …

单片机学习笔记---中断系统(含外部中断)

目录 中断介绍 中断优先级 中断嵌套 中断技术的优点 中断的结构 中断请求源 中断优先级 5个基本中断内部的结构 INT0和INT1 T0和T1 串口 中断寄存器 IE TCON 中断优先级列表 中断号 中断响应的条件 代码编写实例分析 外部中断硬件电路分析 这一节我们主要是…

‘javax.sql.DataSource‘ that could not be found的问题

报错信息如下&#xff1a; 2024-02-04 16:31:14.832 WARN 952 --- [ main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDepen…

Codeforces Edu 74 E. Keyboard Purchase 【状压DP +贡献】

E. Keyboard Purchase 题意 给定一个长度为 n n n 的字符串 s s s 仅由前 m m m 个小写字母组成 现在要求求出包含前 m m m 个小写字母的键盘&#xff0c;使得在键盘上敲出 s s s 要移动的距离最短 移动总距离为&#xff1a; ∑ i 2 n ∣ p o s s i − 1 − p o s s i…