Python Subprocess模块

Python的subprocess模块是一个强大的工具,它允许你在Python中执行外部命令,并与其进行交互

1. subprocess模块的基本用法


import subprocess
result = subprocess.run(["ls", "-l"], capture_output=True, text=True)
print(result.stdout)

在这个例子中,我们使用subprocess.run()函数来执行ls -l命令,并捕获其输出

2. 控制输入输出

        subprocess模块提供了多种方式来控制命令的输入和输出。例如,你可以使用stdin参数来提供命令的输入,使用stdout和stderr参数来捕获命令的标准输出和错误输出。此外,你还可以使用subprocess.PIPE来创建管道,将命令的输入输出重定向到Python程序中。


import subprocess
# 通过stdin参数提供输入
result = subprocess.run(["grep", "hello"], input="hello world\nhello python\n", capture_output=True, text=True)
# 捕获标准输出和错误输出
print(result.stdout)
print(result.stderr)

3. subprocess模块还提供了许多高级的交互技巧

可以使用subprocess.Popen类来创建一个进程对象,并使用communicate()方法来与其进行交互。这使得你可以向进程发送信号、向其输入数据,并获取其输出


import subprocess
# 创建进程对象
process = subprocess.Popen(["cat"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
# 向进程输入数据并获取输出
output, _ = process.communicate("Hello, subprocess!")
print(output)

4. 并行执行多个命令

subprocess模块提供了concurrent.futures模块来实现这一点。你可以使用concurrent.futures.ProcessPoolExecutor来并行执行多个命令,从而提高程序的性能。


import subprocess
from concurrent.futures import ProcessPoolExecutor
def run_command(command):result = subprocess.run(command, capture_output=True, text=True)return result.stdout
commands = [["ls", "-l"], ["pwd"], ["echo", "Hello, subprocess!"]]
with ProcessPoolExecutor() as executor:results = list(executor.map(run_command, commands))
print(results)

5. 文件压缩实操

Python的subprocess模块可以用来执行外部命令,并与其进行交互。在Windows系统中,可以使用subprocess模块来压缩文件,并排除某个文件夹


import subprocess
# 压缩文件
subprocess.run(['zip', '-r', 'archive.zip', 'file1.txt', 'file2.txt'])
# 解压文件
subprocess.run(['unzip', 'archive.zip'])

我们使用subprocess.run()函数来执行zip命令,并使用-r参数来递归地压缩文件,将file1.txt和file2.txt压缩为archive.zip。使用unzip命令可以解压文件,如果我们想要排除某个文件夹,可以在压缩命令中使用-x参数来指定要排除的文件夹。例如,假设我们想要排除名为exclude_folder的文件夹,可以这样写:


import subprocess
# 压缩文件并排除文件夹
subprocess.run(['zip', '-r', 'archive.zip', '-x', 'exclude_folder/*', 'file1.txt', 'file2.txt'])

在上面的代码中,我们使用-x参数来指定要排除的文件夹,其值为exclude_folder/*。

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

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

相关文章

Hadoop入门学习笔记

视频课程地址:https://www.bilibili.com/video/BV1WY4y197g7 课程资料链接:https://pan.baidu.com/s/15KpnWeKpvExpKmOC8xjmtQ?pwd5ay8 这里写目录标题 一、VMware准备Linux虚拟机1.1. VMware安装Linux虚拟机1.1.1. 修改虚拟机子网IP和网关1.1.2. 安装…

【智能家居】一、工厂模式实现继电器灯控制

一、用户手册对应的I/O 二、工厂模式实现继电器灯控制 三、代码段 controlDevice.h(设备类)main.c(主函数)bathroomLight.c(浴室灯)bedroomLight.c(卧室灯)bedroomLight.c&#xff…

python基础练习题库实验7

文章目录 题目1代码实验结果题目2代码实验结果题目3代码实验结果题目总结题目1 编写代码创建一个名为Staff的类和方法__init__,以按顺序初始化以下实例属性: -staff_number -first_name -last_name -email 代码 class Staff:def __init__(self, staff_number, first_name,…

【网络安全】下载并安装 kali 的虚拟机 版本

kali虚拟机版本的下载地址:Get Kali | Kali Linux 下载完成后,解压,双击.vmx打开,即可完成kali在虚拟机中的安装和配置。 默认账户和密码都为kali

Python爬取某电商平台商品数据及评论!

目录 前言 主要内容 1. 爬取商品列表数据 2. 爬取单个商品页面的数据 3. 爬取评论数据 4. 使用代理ip 总结 前言 随着互联网的发展,电商平台的出现让我们的消费更加便利,消费者可以在家里轻松地购买到各种商品。但有时候我们需要大量的商品数据进…

Vue3中的<script setup>和<script>的区别

相同点 在一个 Vue3 单文件组件 (SFC)中&#xff0c;<script setup> 和 <script> 它们各自最多只能存在一个。 不同点 <script setup> 这个脚本块将被预处理为组件的 setup() 函数&#xff0c;这意味着它将为每一个(也可以说每一次)组件实例都执行。 <…

数据库系统原理——备考计划2:数据库系统的概述

前言&#xff1a; 基于课本、上课ppt、复习总结ppt进行一个知识点的罗列&#xff0c;方便后期高效地复习 目录 前言&#xff1a; 一、基本概念 1.数据&#xff1a; &#xff08;1&#xff09;概念&#xff1a; &#xff08;2&#xff09;数据的种类&#xff1a; &#xff08;3&…

YOLOv5算法进阶改进(6)— 更换主干网络之ResNet18

前言:Hello大家好,我是小哥谈。ResNet18是ResNet系列中最简单的一个模型,由18个卷积层和全连接层组成,其中包含了多个残差块。该模型在ImageNet数据集上取得了很好的表现,成为了深度学习领域的经典模型之一。ResNet18的优点是可以解决深度神经网络中梯度消失的问题,使得性…

解决终Linux端中文乱码问题及设置UTF-8编码

简介 当在终端中复制粘贴中文文本时出现乱码问题&#xff0c;可能是因为终端未正确设置 UTF-8 编码。本文将介绍如何通过设置语言环境和字符类型环境&#xff0c;以及选择正确的语言包&#xff0c;来解决这一问题。 步骤&#xff1a; 1. 检查当前终端设置 在终端中运行以下…

深入理解网络阻塞 I/O:BIO

&#x1f52d; 嗨&#xff0c;您好 &#x1f44b; 我是 vnjohn&#xff0c;在互联网企业担任 Java 开发&#xff0c;CSDN 优质创作者 &#x1f4d6; 推荐专栏&#xff1a;Spring、MySQL、Nacos、Java&#xff0c;后续其他专栏会持续优化更新迭代 &#x1f332;文章所在专栏&…

Java== 和 equals 的区别是什么?

Java 和 equals 的区别是什么&#xff1f; 在Java中&#xff0c; 运算符和 equals() 方法有不同的用途&#xff0c;主要取决于它们被应用的对象类型。 运算符&#xff1a; 比较基本数据类型&#xff1a; 对于基本数据类型&#xff08;如 int、float、double 等&#xff09;&a…

零基础也可以学编程,分享中文编程工具开发软件

零基础也可以学编程&#xff0c;分享中文编程工具开发软件 给大家分享一款中文编程工具&#xff0c;零基础轻松学编程&#xff0c;不需英语基础&#xff0c;编程工具可下载。 这款工具不但可以连接部分硬件&#xff0c;而且可以开发大型的软件&#xff0c;象如图这个实例就是用…

使用功率MOSFET常见的一些问题(二)

使用功率MOSFET常见的一些问题&#xff08;二&#xff09; 1.栅源电压瞬变2.安全工作区3.感应导通和击穿3.1 如何避免感应导通 1.栅源电压瞬变 过大的电压瞬态会穿透薄栅源氧化层&#xff0c;造成永久性损坏。不幸的是&#xff0c;这种瞬态在电源开关电路中产生&#xff0c;并 …

行业研究:2023年氟化钾发展前景及细分市场分析

氟化工产品&#xff0c;作为化工新材料之一&#xff0c;在“十二五”规划被单列一个专项规划。由于产品具有高性能、高附加值&#xff0c;氟化 工产业被称为黄金产业。 氟是一种盐&#xff0c;有一种叫做钾的腐化盐&#xff0c;这种产品是白色结晶&#xff0c;易吸收&#xff0…

OSI七层参考模型及其协议和各层设备

OSI网络模型是开放系统互联&#xff08;Open Systems Interconnection&#xff09;参考模型&#xff0c;它是由国际标准化组织&#xff08;ISO&#xff09;制定的。这个模型将网络系统划分为七个层次&#xff0c;OSI网络模型的七层是&#xff1a;物理层、数据链路层、网络层、传…

手把手教你写IP地址规划方案

中午好&#xff0c;我的网工朋友。 IP地址的合理规划是网络设计的重要环节&#xff0c;大型计算机网络必须对IP地址进行统一规划并得到有效实施。 IP地址规划的好坏&#xff0c;不仅会影响到网络路由协议算法的效率&#xff0c;还会影响到网络的性能&#xff0c;网络的扩展&a…

【Spring集成MyBatis】动态sql

文章目录 1. 什么是动态sql2. 动态sql之<if>3. 动态sql之<where>4. 动态sql之<foreach>5. sql片段抽取 此篇的代码基于 【Spring集成MyBatis】MyBatis的Dao层实现&#xff08;基于配置&#xff0c;非注解开发&#xff09;续写 1. 什么是动态sql MyBatis映射…

对话特斯拉北美车主:FSD什么水平?深度用户解密V11

作者 |Amy 编辑 |德新 近期中国四部委联合印发通知&#xff0c;部署开展智能网联汽车准入和上路通行试点工作&#xff0c;要求具备量产条件L3、L4 级别智能网联车在限定区域内开展上路试点&#xff0c;并且首次明确事故责任判定。 通知下发后&#xff0c;市场传闻&#xff1a…

Linux cu命令详细教程:如何与设备进行串行通信建立两个系统间连接(附实例教程和注意事项)

Linux cu命令介绍 Linux cu命令是一个简单而有效的方式来建立两个系统之间的连接。cu命令可以用于与设备&#xff08;如调制解调器、系统控制台和其他串行设备&#xff09;进行串行通信。cu命令默认以行模式操作&#xff0c;但可以通过按~键切换到字符模式。 Linux cu命令适用…

linux shell中set -e命令的作用

set -e 是一个在shell脚本中常用的命令&#xff0c;它的含义是在脚本执行过程中&#xff0c;如果出现任何一个命令的执行结果不是零&#xff08;即命令执行失败&#xff09;&#xff0c;则立即退出整个脚本。 set -e 的用途是在脚本中进行错误处理和控制流程。通过设置set -e&…