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

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++2024寒假J312实战班2.5

题目列表: #1多项式输出 #2龙虎斗 #3表达式求值 #4解密 #1多项式输出 这是第一个题目很简单,我也作对了。 我们下来看一下题目: 我们先来看一下样例: 5 100 -1 1 -3 0 10 首先100是第一项,所以不输出加号&…

软件文档测试

1 文档测试的范围 软件产品由可运行的程序、数据和文档组成。文档是软件的一个重要组成部分。 在软件的整人生命周期中,会用到许多文档,在各个阶段中以文档作为前阶段工作成果的体现和后阶段工作的依据。 软件文档的分类结构图如下图所示: …

Spring第三天

一、AOP 1 AOP简介 问题导入 问题1:AOP的作用是什么? 问题2:连接点和切入点有什么区别,二者谁的范围大? 问题3:请描述什么是切面? 1.1 AOP简介和作用【理解】 AOP(Aspect Oriented Progra…

Stable Diffusion 模型下载:RealCartoon-Anime - V10

文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十下载地址模型介绍 这个检查点是从 RealCartoon3D 检查点分支出来的。它的目标是产生更多的“动漫”风格,因为我喜欢动漫。:)我知道有很多人做得很好(

JVM之GC垃圾回收

GC垃圾回收 如何判断对象可以回收 引用计数法 如果有对象引用计数加一,没有对象引用,计数减一,如果计数为零,则回收 但是如果存在循环引用,即A对象引用B对象,B对象引用A对象,会造成内存泄漏 可…

【第二十三课】最小生成树:prime 和 kruskal 算法(acwing858,859 / c++代码 )

目录 前言 Prime算法--加点法 acwing-858 代码如下 一些解释 Kruskal算法--加边法 acwing-859 并查集与克鲁斯卡尔求最小生成树 代码如下 一些解释 前言 之前学最短路的时候,我们都是以有向图为基础的,当时我们提到如果是无向图&#xf…

流畅的Python(八)-对象引用、可变性和垃圾回收

一、核心要义 本章主要讨论对象和对象名称之间的区别。名称不是对象,而是单独的东西。 二、代码示例 1、标识、相等性和别名 #!/usr/bin/env python # -*- coding: utf-8 -*- # Time : 2024/2/8 10:58 # Author : Maple # File : 01-标识,相等性和别名.p…

大型秒杀中如何减库存?JAVA 架构知识

目前来看,业务系统中最常见的就是预扣库存方案,像你在买机票、买电影票时,下单后一般都有个“有效付款时间”,超过这个时间订单自动释放,这都是典型的预扣库存方案。而具体到秒杀这个场景,应该采用哪种方案…

《剑指 Offer》专项突破版 - 面试题 30 和 31:详解如何设计哈希表以及利用哈希表设计更加高级、复杂的数据结构

目录 一、哈希表的基础知识 二、哈希表的设计 2.1 - 插入、删除和随机访问都是 O(1) 的容器 2.2 - 最近最少使用缓存 一、哈希表的基础知识 哈希表是一种常见的数据结构,在解决算法面试题的时候经常需要用到哈希表。哈希表最大的优点是高效,在哈希表…

Python算法题集_搜索二维矩阵II

Python算法题集_搜索二维矩阵II 题41:搜索二维矩阵II1. 示例说明2. 题目解析- 题意分解- 优化思路- 测量工具 3. 代码展开1) 标准求解【双层循环】2) 改进版一【行尾检测】3) 改进版二【对角线划分】 4. 最优算法 本文为Python算法题集之一的代码示例 题41&#xf…

政安晨:政安晨:机器学习快速入门(三){pandas与scikit-learn} {模型验证及欠拟合与过拟合}

这一篇中,咱们使用Pandas与Scikit-liarn工具进行一下模型验证,之后再顺势了解一些过拟合与欠拟合,这是您逐渐深入机器学习的开始! 模型验证 评估您的模型性能,以便测试和比较其他选择。 在上一篇中,您已经…

网络请求库axios

一、认识Axios库 为什么选择axios? 功能特点: 在浏览器中发送 XMLHttpRequests 请求在 node.js 中发送 http请求支持 Promise API拦截请求和响应转换请求和响应数据 补充: axios名称的由来? 个人理解没有具体的翻译. axios: ajax i/o system 二、axios发送请求 1.axios请求…