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://xiahunao.cn/news/2776844.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

endnotesX9 如何批量导入 .enw文件

文章是用schoolar搜出来 点击下载引用之后,endnotesX9只能一个一个从.enw文件导入,麻烦 —————————————— 可以在schoolar保存到个人图书馆 类似于上面这种,我用的是保存,保存很多的论文之后点我的个人图书馆&#x…

网友:感谢华为救了我的下半生。

(关注数据结构和算法,了解更多新知识) 最近一位网友发视频称,华为Mate60 Pro帮他挡了子弹。视频配文:“一场意外,没有这个手机隔挡,下半生我可能就在轮椅上度过了!”视频中,手机摄像头右侧被击中…

在 Next 中, ORM 框架 Prisma 使用

Prisma 介绍 Prisma 是一个 ORM 框架,主要用于 Node.js 或 TypeScript 作为后端开发的应用,主要有三部分组成: Prisma Client:自动生成且类型安全的查询构建器,适用于 Nodex.js 和 TS;Prisma Migrate: 迁…

Linux运用fork函数创建进程

fork函数: 函数原型: pid_t fork(void); 父进程调用fork函数创建一个子进程,子进程的用户区父进程的用户区完全一样,但是内核区不完全一样;如父进程的PID和子进程的PID不一样。 返回值: RETURN VALUEO…

【CC++】内存管理1:new + delete

前言 之前我们学习过C语言中的内存管理(各种函数)今天我们来学习C中的内存管理 引入 我们先来看下面的一段代码和相关问题 int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticVar 1;int localVar 1;int num1[10] {…

Mysql-数据库优化-客户端连接参数

客户端参数 原文地址 # 连接池配置 # 初始化连接数 spring.datasource.druid.initial-size1 # 最小空闲连接数,一般设置和initial-size一致 spring.datasource.druid.min-idle1 # 最大活动连接数,一个数据库能够支撑最大的连接数是多少呢? …

给大家介绍一个云厂商:雨云

雨云云服务器是新一代云计算解决方案 随着云计算技术的不断发展,云服务器已经成为企业和个人部署应用程序和存储数据的首选。雨云云服务器作为云计算领域的新兴力量,以其高性能、高可靠性和高安全性受到了越来越多用户的青睐。本文将对雨云云服务器进行详…

qt/c++实现拓扑排序可视化

💂 个人主页:pp不会算法^ v ^ 🤟 版权: 本文由【pp不会算法v】原创、在CSDN首发、需要转载请联系博主 💬 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦 实现功能 1、选择文件导入初始数据 2、逐步演示 3、排序完成输出…

【网工】华为设备命令学习(服务器发布)

本次实验主要是内网静态nat配置没,对外地址可以理解为一台内网的服务器,外网设备可以ping通内网的服务器设备,但是ping不通内网的IP。 除了AR1设备配置有区别,其他设备都是基础IP的配置。 [Huawei]int g0/0/0 [Huawei-GigabitEt…

Linux操作系统基础(六):Linux常见命令(一)

文章目录 Linux常见命令 一、命令结构 二、ls命令 三、cd命令 四、mkdir命令 五、touch命令 六、rm命令 七、cp命令 八、mv命令 九、cat命令 十、more命令 Linux常见命令 一、命令结构 command [-options] [parameter]说明: command : 命令名, 相应功能的英文单词…

Linux 存储管理(磁盘管理、逻辑卷LVM、交换分区swap)

目录 1.磁盘管理 1.1 磁盘简介 1.2 管理磁盘 添加磁盘 管理磁盘流程三步曲 1.查看磁盘信息 2.创建分区 3.创建文件系统 4.挂载mount 5.查看挂载信息 6.MBR扩展分区 7.重启后的影响 2.逻辑卷LVM 2.1 简介 ​​​​​​2.2 创建LVM 2.3 VG管理 2.4 LV管理实战-在…

前端JavaScript篇之如何获得对象非原型链上的属性?

目录 如何获得对象非原型链上的属性? 如何获得对象非原型链上的属性? 要获取对象上非原型链上的属性,可以使用 hasOwnProperty() 方法。这个方法是 JavaScript 内置的对象方法,用于检查一个对象是否包含指定名称的属性&#xff0…

[SAP ABAP] 创建Package

Package被称作包或开发类,能够存储所有SAP系统开发过程中的相关对象,方便进行管理和查询 我们可以通过Package实现其所包含的对象在不同服务器之间进行批量传输(通过请求号传输) 请求号是文件,用于记录所有对象的创建与修改记录 1.创建Packag…

【Larry】英语学习笔记语法篇——换一种方式理解词性

目录 一、换一种方式理解词性 1、名词、形容词、副词,这就是一切 2、词性之间的修饰关系 3、介词其实很简单 形容词属性的介词短语 副词属性的介词短语 ①修饰动词 ②修饰形容词 ③修饰其他副词 一、换一种方式理解词性 1、名词、形容词、副词&#xff0c…

无人机动力系统高倍率锂聚合物电池介绍,无人机锂电池使用与保养,无人机飞行控制动力源详解

无人机电池使用及保养 电池是无人机飞行的动力来源,也是一个消耗品,对电池充分了解,采取正确的使用方法,妥善进行维护保养将有助于提高飞行的安全性、延长电池的使用寿命。以下将详细对电池的使用和管理进行讲解。 高倍率锂聚合物电池的含义…

SpringSecurity+OAuth2权限管理实战

Spring Security快速入门 官方文档: Spring Security :: Spring Security 功能: 身份认证(authentication) 授权(authorization) 防御常见攻击(protection against common attacks&#xff…

“Hopf Oscillator-Based Gait Transition for A Quadruped Robot“代码复现

paper链接:https://ieeexplore.ieee.org/abstract/document/7090642/ import math import numpy as np import matplotlib.pyplot as plt# 设置中文显示 plt.rcParams[font.sans-serif] [SimHei] # 设置中文字体为黑体 plt.rcParams[axes.unicode_minus] False …

政安晨:示例演绎TensorFlow的官方指南(三){快速使用数据可视化工具TensorBoard}

这篇文章里咱们演绎TensorFLow的数据可视化工具:TensorBoard。 在机器学习中,要改进模型的某些参数,您通常需要对其进行衡量。TensorBoard 是用于提供机器学习工作流期间所需测量和呈现的工具。它使您能够跟踪实验指标(例如损失和…

54.螺旋矩阵(Java)

题目描述: 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。 输入: matrix [[1,2,3],[4,5,6],[7,8,9]] 输出: [1,2,3,6,9,8,7,4,5] 代码实现: import java.util.ArrayLi…

Linux操作系统基础(四):Linux连接工具使用

文章目录 Linux连接工具使用 一、为什么要使用远程连接工具 二、虚拟机网络配置 三、获取Linux操作系统IP地址 四、聊一聊Linux系统账号 五、安装finalshell远程连接软件 六、建立连接 七、软件界面与使用说明 Linux连接工具使用 一、为什么要使用远程连接工具 因为一…