python—subprocess模块常用方法介绍

news2024/11/17 14:53:18

目录

subprocess.run()

subprocess.Popen()

subprocess.call()

subprocess.check_call()

subprocess.getstatusoutput()

subprocess.getoutput()

subprocess.check_output()


subprocess是子流程,即进程的意思,该模块可以启动一个新进程,并连接到它们的输入/输出/错误管道,从而获取返回值。

subprocess.run()

常用参数:

  • args:shell命令,可以是字符串或者序列类型(如:list,元组)
  • stdin、stdout 和 stderr:子进程的标准输入、输出和错误。其值可以是 subprocess.PIPE、subprocess.DEVNULL、一个已经存在的文件描述符、已经打开的文件对象或者 None。subprocess.PIPE 表示为子进程创建新的管道。subprocess.DEVNULL 表示使用 os.devnull。默认使用的是 None,表示什么都不做。另外,stderr 可以合并到 stdout 里一起输出。
  • timeout:设置命令超时时间。如果命令执行时间超时,子进程将被杀死,并弹出 TimeoutExpired 异常。
  • check:如果该参数设置为 True,并且进程退出状态码不是 0,则弹 出 CalledProcessError 异常。
  • encoding: 如果指定了该参数,则 stdin、stdout 和 stderr 可以接收字符串数据,并以该编码方式编码。否则只接收 bytes 类型的数据。
  • shell:如果该参数为 True,将通过操作系统的 shell 执行指定的命令。
print(subprocess.run(["adb", "devices"]))
print('****************************************************')
subprocess.run(["adb", "devices"])

  

subprocess.Popen()

Popen 是 subprocess的核心,作为子进程的创建和管理。 

常用参数:

  • args:shell命令,可以是字符串或者序列类型(如:list,元组)
  • bufsize:缓冲区大小。当创建标准流的管道对象时使用,默认-1。0:不使用缓冲区;1:表示行缓冲,仅当universal_newlines=True时可用,也就是文本模式;正数:表示缓冲区大小;负数:表示使用系统默认的缓冲区大小。
  • stdin, stdout, stderr:分别表示程序的标准输入、输出、错误句柄
  • preexec_fn:只在 Unix 平台下有效,用于指定一个可执行对象(callable object),它将在子进程运行之前被调用
  • shell:如果该参数为 True,将通过操作系统的 shell 执行指定的命令。
  • cwd:用于设置子进程的当前目录。
  • env:用于指定子进程的环境变量。如果 env = None,子进程的环境变量将从父进程中继承。
subprocess.Popen(['adb', 'devices'],shell=True)   # 同Popen('pip list',shell=True)

  

Popen 对象方法:

  • poll(): 检查进程是否终止,如果终止返回 returncode,否则返回 None。
  • wait(timeout): 等待子进程终止。超时报错,默认无超时时间。
  • communicate(input,timeout): 和子进程交互,发送和读取数据。
  • send_signal(singnal): 发送信号到子进程 。
  • terminate(): 停止子进程,也就是发送SIGTERM信号到子进程。
  • kill(): 杀死子进程。发送 SIGKILL 信号到子进程。
# 打开并关闭视频播放
res = subprocess.Popen(r'C:\Program Files\Windows Media Player\wmplayer.exe  D:\zhuomian\test_file\QQ录屏20221104164439.mp4', close_fds=True)
print(res.pid)
print(res.poll())
time.sleep(2)
res.kill()
# res.terminate()
print(res.poll())
print(res.wait(timeout=2))

  

subprocess.call()

执行命令,返回命令的结果和执行状态,0或非0

suc = subprocess.call('adb devices')
print('执行成功结果状态:',suc)
print('****************'*5)
fai = subprocess.call('adb devices 1')
print('执行失败结果状态:',fai)

  

subprocess.check_call()

执行命令,返回结果和状态,正常为0 ,执行错误则抛出异常

suc = subprocess.check_call('adb devices')
print('执行成功结果状态:', suc)
print('******************'*4)
fai = subprocess.check_call('adb devices 1')

  

subprocess.getstatusoutput()

接受字符串形式的命令,返回 一个元组形式的结果,第一个元素是命令执行状态,第二个为执行结果。

print(subprocess.getstatusoutput('adb devices'))
print(subprocess.getstatusoutput('adb devices 1'))

  

subprocess.getoutput()

接受字符串形式的命令,返回执行结果 

print(subprocess.getoutput('adb devices'))
print(subprocess.getoutput('adb devices 1'))

  

subprocess.check_output()

执行命令,返回执行的结果,而不是打印,错误时抛出异常。

res = subprocess.check_output('adb devices')
print(res)

  

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

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

相关文章

印度电线标准IS 694(R2020),印度插头标准IS 1293(R2020)

印度电线标准IS 694(R2020) https://download.csdn.net/download/std86021/87328675POLYVINYLCHLORIDEINSULATEDUNSHEATHEDANDSHEATH更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/std86021/87328675 补丁一:IS694Amd…

已获1000 万美元战略融资,Web3链游#Delysium 有何魔力?

这周社区推文关注了AIGC在游戏领域中的创新应用,在Web3领域中,有哪些值得关注的链游项目呢?Mixlab小杜AIGC 与游戏机制创新玩法结合已成为潮流趋势,如游戏内容资产生成、智能NPC设计与自定义游戏玩法等都有非常大的探索空间。Web3…

【ACWING】【BFS】【844走迷宫】【845八数码】

一、走迷宫 给定一个 nm的二维整数数组,用来表示一个迷宫,数组中只包含 0 或 1,其中 0表示可以走的路,1 表示不可通过的墙壁。 最初,有一个人位于左上角 (1,1)处,已知该人每次可以向上、下、左、右任意一…

CVE复现1

1 CVE-2022-22980 spring Data MongoDB SpEL 表达式注入,Spring Data MongoDB应用程序在对包含查询参数占位符的SpEL表达式使用Query或Aggregation注解的查询方法进行值绑定时,如果输入未被过滤,则容易受到SpEL注入攻击。 影响范围 Spring Data Mongo…

190:vue+openlayers 调整卫星运动的播放速度,展示运动轨迹

第190个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+openlayers项目中利用两行根数计算卫星在某一时刻的位置点,利用时间循环,定位出不同的位置,呈现动画的效果。文中利用slider的改变来确定当前时间为开始时间,slider的值为加速倍数,每个setTimeout为10毫秒,更新…

【博客系统】前端页面

博客系统 实现一个简单的博客系统。 当前先完成页面设计部分,通过学习的前端知识来构建出网页。 主要分成四个部分: 博客列表页博客正文页博客登陆页博客编辑页 预期效果 博客列表页效果 博客详情页效果 博客登陆页效果 博客编辑页效果 实现博客列…

C++数据结构--跳表的思想--手把手教你实现跳表--0721

1、 跳表--skiplist skiplist本质上是一种查找结构,跟平衡搜索树和哈希表的价值是一样的。跳表首先是一个链表,它是在链表的基础上发展的。但一般的链表进行查找数据只能全部遍历,时间复杂度为O(n)。 William Pugh的优化: 假如每…

Kafka一次线上问题

线上问题: Kafka: 客户说Broker不时会发生些错误日志,也看到topic的tps下降很快很明显, 日志看是ISR在不断的伸缩, 监控发现发生问题时的CPU、IO、磁盘都没有瓶颈 再查看堆栈信息:可看到关键信息: 有锁…

R语言raster包批量读取单一或大量栅格图像

本文介绍基于R语言中的raster包,读取单张或批量读取多张栅格图像,并对栅格图像数据加以基本处理的方法。 1 包的安装与导入 首先,我们需要配置好对应的R语言包;前面也提到,我们这里选择基于raster包来实现栅格图像数据…

TestStand-单执行界面

文章目录用户界面运行流程例程创建前面板设置用户界面主窗口前面板控件配置用户事件用户界面运行流程 用户界面设计的基本元素:管理控件、可视化控件、连接、应用程序启动及关闭、注册事件、处理事件。 LabVIEW中通过Regesiter Event Callback注册事件。 LabVIEW-Te…

flink内存管理, 增加Task内存大小,减少ManageMemory, network内存的方法

问题描述 flink默认分配的内存,不合理,jvm 堆内存太小,其他内存太大。向yarn申请8G内存,最后分配到heap的大小才3.2G,不是让人抓狂吗? 以上是,向yarn申请8G内存,实时分配的内存是上…

“破壁者”氚云,打破低代码之困

互联网云大厂的“火”已经烧红了低代码领域的半边天。 自低代码在国内盛行以来,尤其是时至2022年末,阿里、腾讯、华为等云大厂的跑马圈地仍如火如荼,动作密集程度堪比机关枪。 面对日益增长的企业数字化业务需求,产品经理只需少…

编译器设计(十三)——指令调度

一、简介 对程序块或过程中的操作进行排序以有效利用处理器资源的任务称为指令调度(instruction scheduling)。调度器的输入是由目标机汇编语言操作组成的一个部分有序的列表,输出是同一列表的一个有序版本。 一组指令的执行时间严重依赖于…

什么是云存储?有什么优势?

在云计算中,用户将数据保存在远程位置。它可以通过互联网连接访问,而不是在本地或物理上(在硬盘上)访问。而云存储成为最实用有效的方式之一。它有助于在线存储数据。 什么是云存储? 云存储是指安全、全局和可扩展的数据存储。它用于存储不可变数据&…

智慧工厂的大脑——APS生产排程系统

生产计划排程是生产管理中的核心工作,或许很多人不同意这个观点,只是因为这个观点的前提是生产计划排程在生产管理中真正起到了作用,目前国内制造业的现状还不能体现出生产计划排程的真正作用,所以也没有人认为它是最核心的工作&a…

蓝桥杯Python练习题11-闰年判断

资源限制   内存限制:256.0MB C/C时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s 问题描述   给定一个年份,判断这一年是不是闰年。 当以下情况之一满足时,这一年是闰年:   1. 年…

“集合划分问题”如何解决?这里教你个妙招,轻松掌握这类问题~

目录 “集合划分”这类问题的解题思路 一、划分为k个相等的子集 二、火柴拼正方形 “集合划分”这类问题的解题思路 这类题一般都会描述成这个样子:“给你一个数组,是否能将他划分成n个数值相等的子集?”,再或者有些可能题目描述…

MinIO高性能对象存储

一、MinIO高性能对象存储 MinIO是一个高性能对象存储解决方案,它提供了与Amazon Web Services S3兼容的API,并支持所有核心S3功能。 MinIO旨在部署任何地方—公共或私有云、裸机基础设施、协调环境和边缘基础设施。本文档说的是Windows平台上MinIO部署的…

接口测试自动化框架选型

1、fiddler fiddler 是一个 HTTP 协议调试代理工具,Web 和手机测试都会用到,同时也支持接口测试。它能够记录并检查所有你的电脑和互联网之间的 http 通讯,设置断点,查看所有的“进出”Fiddler 的数据(指 cookie,html,js,css 等文…

ASP.NET大型药品销售ERP系统源码

ASP.NET医药ERP管理系统源码 药品销售管理系统源码 源码分享!需要源码学习可私信我。 一、源码特点 1、渠道销售商在把药品从厂商销售到医院时,需要管理大量的数据,这些通常包括药品从厂商采购数据、药品销售到商业公司的数据,以…