python3 subprocess.Popen监控控制台输出

Python调用系统命令:os.system与subprocess核心差异与实战避坑指南 在Python中执行系统命令是自动化、运维和集成开发的基础能力,其底层涉及进程创建、标准流管理、编码处理与安全控制等关键机制。`os.system()`作为早期兼容接口,仅返回退出码,无法捕获输出、缺乏超时控制且存在命令注入风险;而`subprocess`模块提供精细的进程生命周期管理、管道通信、跨平台编码支持(如`text=True`)及健壮错误处理(如`check=True`、`timeout`)。它支撑着CI/CD脚本、爬虫环境启动、FFmpeg音视频处理、Docker容器内命令调用等典型工程场景。本 阅读详情

问题描述: ①在 Python 代码中编译可执行文件,需要监控执行过程及运行结果,当前场景等效为捕获控制台的特征信息的“打印情况”;②编译程序独占进程,且存在Terminal进度条等频繁刷新的需要监控的特征信息;③需要捕获的特征信息存在简体中文,需要做编码转换;

解决方案: 如下所示为本例参考代码。使用 Python3 内置模块 subprocess.Popen 建立channel 。设定参数encoding='utf8',转码简体中文。设定universal_newlines=True以及bufsize=1建立缓冲区,以便捕获频繁刷新的进度条等特征信息。

"""
仅用作demo演示,请勿在真实IPC场景下直接cv代码
sys: Windows
env: Python 3.7.9
"""
import os
import subprocess

title = ""


def _listener():
    global title
    # 如果您还未安装you-get脚手架 请先执行 pip install you-get 或 pip3 install you-get
    # 尝试直接在 Terminal 中运行 `you-get [url]` 查看区别
    # you-get 将嗅探目标链接下的影视资源对象,并保存至当前目录下
    cmd = "you-get https://www.bilibili.com/video/BV1Yv41147QK".split(' ')
    p = subprocess.Popen(
        cmd,
        stdin=subprocess.PIPE,
        stdout=subprocess.PIPE,
        stderr=subprocess.STDOUT,
        universal_newlines=True,
        encoding='utf8',
        bufsize=1
    )
    while subprocess.Popen.poll(p) is None:
        stream = p.stdout.readline()
        print(stream)

        # 仅做演示,首次下载时捕获视频文件名
        if title == "" and stream.startswith("Downloading"):
            title = stream.split(' ')[1]


def demo():
    _listener()
	
	# 仅作演示,自动打开下载好的视频
    try:
        os.startfile(f'{title}')
    except (FileNotFoundError, FileExistsError):
        pass


if __name__ == '__main__':
    demo()

参考资料:
[1] subprocess — Subprocess management — Python 3.7.11 documentation

Python实时获取命令行输出 通过捕获命令行的输出,我们可以方便地在Python中处理命令行的结果,并进行进一步的操作和分析。在Python中,我们经常需要与命令行进行交互,并获取命令行执行结果。通过这种方式,我们可以实时获取命令行的输出,并在Python中进行处理。函数,它接受一个命令作为参数,并返回命令行的输出。模块来执行命令,并通过捕获进程的输出来获取命令行的执行结果。函数并传入要执行的命令来获取命令行的输出。函数来执行命令,并获取命令行的输出。方法来等待命令执行完成,并获取命令行的输出和错误信息。命令,并将输出赋值给。 阅读详情

相关推荐

无法找到来自源 nvlddmkm 的事件 ID 14 的描述

具体错误是: 无法找到来自源 nvlddmkm 的事件 ID 14 的描述。本地计算机上未安装引发此事件的组件,或者安装已损坏。可以安装或修复本地计算机上的组件。 出现这样错误的原因有很多了,有可能是硬件有可能是软件。由于我是刚配置的电脑,起初非常怀疑是自己组装的问题,折腾了好久,心态爆炸!!!先说我报这样错误的情况,以及解决办法,供后面人参考。 ...

SeventhBlue 6万+

Python模块整理(三):子进程模块subprocess

本来收集整理网络上相关资料后整理: 从python2.4版本开始,可以用subprocess这个模块来产生子进程,并连接到子进程的标准输入/输出/错误中去,还可以得到子进程的返回值。 subprocess意在替代其他几个老的模块或者函数,比如:os.system os.spawn* os.popen* popen2.* commands.* 一、subprocess...

weixin_34320159的博客 8517

安装IC Complier 2(安装synposys的其他工具也可以来看看,因为殊途同归)

安装ICC2

hjt66666的博客 5771

【Python3 高级篇】5. subprocess 子进程管理,取代 os.popen()/os.system()

在多年的发展过程中,Python 演化出了许多种运行 shell 命令的方式,然而,对于当今 Python3.x (3.5 及之后的版本)来说,官方建议的,最好用且功能最全的调用 shell 命令方式,应该就是内置的subprocess模块。其他模块,如(只能获取返回码),os.popen()(只能获取返回值) 等方法均流行于 Python2.x 时代,已经不再发展,可以放弃了。......

Mr_Apple 的空间 4618

家长必看!用RouterOS轻松屏蔽不良网站,保护孩子上网安全

本文为家长提供了一份详细的RouterOS路由器配置指南,旨在通过技术手段保护儿童上网安全。文章核心介绍了如何利用RouterOS的DNS静态条目功能,轻松实现禁止访问特定不良网站,并结合防火墙时间规则,为孩子构建一个纯净、可控的家庭网络环境,操作简单,无需专业背景。

weixin_28363123的博客 1270

告别双导航栏!微信小程序web-view嵌入H5的导航栏隐藏实战(附uniapp代码)

本文详细解析了微信小程序中web-view嵌入H5页面时出现的双导航栏问题,并提供了基于uniapp的完整解决方案。通过环境感知、动态适配和样式隔离等技术手段,实现导航栏的无缝整合,提升用户体验和屏幕空间利用率。文章包含实战代码示例和常见问题排查指南,帮助开发者快速解决这一常见痛点。

weixin_26945061的博客 347

python--subprocess.Popen()多进程

subprocess.Popen()用法 Popen的属性 子进程的终止 首先来看一段代码: p = subprocess.Popen(['echo','helloworl.py'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) print(p.poll()) print('Exit code:', ...

liuyingying0418的博客 2万+

RK3568下YT8531/YT8521 PHY移植避坑指南:RGMII与设备树详解

嵌入式Linux网络调试中,PHY芯片作为MAC与物理介质之间的桥梁,其驱动配置直接影响网络稳定性。RGMII接口的延时补偿、PHY地址设定以及复位时序是设备树配置中的关键环节,稍有差错便会出现链路已通却无法通信的现象。通过理解PHYLIB框架与mdio总线枚举原理,开发者可以快速定位寄存器级故障。在RK3568等工业级平台中,裕太微YT8531/YT8521凭借高性价比与内核主线支持,成为替代传统方案的热门选择。从设备树模板、内核配置到常见坑点,系统梳理千兆以太网PHY的移植与调试方法,帮助开发者少走弯路

weixin_29189381的博客 215

python3 中subprocess.Popen(shell=True)产生两个进程的解决办法

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键Python3中subprocess.Popen(shell=True)产生两个进程的解决办法如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML...

weixin_44316541的博客 6292

TOEIC托业词汇汇总(完整版)

1.appointment 约会,约定2.attendance 出席人数;出席3.cabinet 橱柜4.calendar 日历;月历;行事历5.clerk 办事员,书记6.directory 人名住址薄7.duplicte 复制;副本8.filing 归档9.in-tray 待处理文件盒10.monitor 检测;监视;追踪11.out-tray 已处理文件盒12.partition 分隔;分隔物(如墙壁等)13.postage 邮费。

weixin_39676449的博客 1万+

LIO-SAM编译ubuntu20.04 Noetic

一、下载二、编译&&解决报错报错如下。

Kenneth666888的博客 690

python popen阻塞_Python Subprocess Popen 管道阻塞问题分析解决

http://ju.outofmemory.cn/entry/279026场景:1》不断播放mp3文件;2》使用订阅发布模式保持tcp长连接,从服务器接收信息造成程序hang死,但是具体是1,2哪种造成的,未排查。在Python里启动命令子进程,慎重。PIPE造成管道阻塞,连带程序假死,wait()阻塞将输出信息输出到管道,communicate()则写入内存,若内存不够,则使用文件模式:p = ...

weixin_39895181的博客 1015

【Bug已解决】Codex CLI 运行时出现 command not found: codex 解决方案

方案适用场景推荐指数修复 PATH 配置最常见的基础排查方向⭐⭐⭐⭐⭐检查原生二进制完整性PATH 正常但执行仍然异常⭐⭐⭐⭐统一包管理器混用多种包管理器导致混乱⭐⭐⭐⭐确认安装脚本未被跳过CI/CD 或企业策略环境⭐⭐⭐⭐排查网络下载渠道企业内网/受限网络环境⭐⭐⭐需要留意 warning 中是否涉及脚本执行失败、网络超时重试等信息,这类 warning 往往是后续问题的前兆,建议出现明显的下载/网络相关警告时就主动重新安装一次确认。Codex CLI 报。

一键难忘的博客 1万+

python subprocess.Popen 监控控制台输出

file_out = subprocess.Popen('ping www.baidu.com', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) while True:     line = file_out.stdout.readline()     print(line)     if subprocess.

GGGL的专栏 8455

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

python执行cmd subprocess持续_如何通过 subprocess 持续获取输出内容

这里将告诉您如何通过 subprocess 持续获取输出内容,教程操作步骤:在实际应用中会用到subprocess的Popen方法执行一些命令,而我们需要通过执行这个命令的来获取输出进行一些信息记录或者分析使用,如果是很快就可以执行完的那还好,有时需要持续跟踪内容的输出,比如大型服务器的内存、CPU、进程监控等,这是一个持续的过程,那么就需要想方设法将输出的内容实时的记录到控制台或者文件中,下面是...

weixin_28715953的博客 1373

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

实时捕获subprocess输出就这么简单,再也不用担心stdout阻塞了

轻松解决Python subprocess的stdout阻塞问题,实时捕获subprocess输出更高效。适用于日志监控、长时间运行任务等场景,通过迭代readline实现逐行捕获,避免管道堵塞。方法简单可靠,提升程序稳定性,值得收藏。

FastSolve的博客 965

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

python subprocess.Popen 监控控制台输出

转自: http://blog.csdn.net/mldxs/article/details/8555819 file_out = subprocess.Popen('ping www.baidu.com', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) while True:     line = fil

xiaoxianerqq的专栏 4275

python的subprocess模块相关函数以及用法

python的subprocess模块相关函数以及用法

duangduang0925的博客 298

python subprocess.Popen 控制台输出 实时监控百度网ping值

import subprocess file_out = subprocess.Popen('ping www.baidu.com', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) while True: line = file_out.stdout.readline() print...

weixin_34199405的博客 873

Python执行系统命令全解析:从os.system到subprocess实战指南

在自动化运维和系统管理中,进程间通信是关键技术之一,它允许程序调用外部命令并获取结果。其核心原理是通过操作系统提供的接口创建子进程,并建立标准输入、输出和错误流的管道进行数据交换。这项技术的价值在于打通高级编程语言与底层系统操作之间的壁垒,实现批量文件处理、系统状态监控和自动化部署等任务。Python通过内置的os和subprocess模块提供了完整的解决方案,其中subprocess模块因其强大的功能和安全性成为当前官方推荐的选择。本文聚焦Python执行CMD命令的实战应用,深入解析subprocess

weixin_34218579的博客 380

Python调用Shell脚本:从os.system到subprocess的实战指南

在系统运维和自动化开发中,进程管理是核心基础概念,它允许程序创建和控制其他应用程序的执行。其原理是通过操作系统提供的接口(如fork/exec)创建子进程,实现进程间通信。这项技术的价值在于能无缝集成系统级工具和脚本,极大扩展了主程序的能力边界,广泛应用于自动化部署、日志处理、系统监控等场景。本文聚焦于Python生态,深入解析如何通过subprocess模块等工具安全高效地执行Shell命令与脚本,并涵盖命令注入防范、输出流处理、超时控制等工程实践,为构建可靠的自动化任务提供完整方案。

weixin_30731305的博客 367

【高效Python编程必备技能】:彻底搞懂subprocess.stdout的正确打开方式

掌握Python subprocess的stdout捕获技巧,轻松实现实时输出获取与进程通信。适用于自动化脚本、命令行工具调用等场景,通过subprocess.run或Popen正确捕获标准输出,避免阻塞并提升程序可控性。方法实用高效,值得收藏。

LiteTrans的博客 657

python 中 使用 subprocess 写出 ProcessManager

python 中 使用 subprocess 写出 ProcessManager

comedate的专栏 493
上一篇: make-sense | 图像标注工具
下一篇: 死神VS火影 | 2D目标检测
YawQinse
博客等级 码龄7年 22粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值