问题描述: ①在 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
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
|