You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python抓取已打开的Windows CMD终端(conhost.exe)文本?

抓取已运行CMD终端(conhost.exe)文本的Python方案

方法1:通过Windows控制台API读取缓冲区

这种方式直接访问CMD的输出缓冲区,无需干扰终端窗口状态,稳定性更高。

  1. 先安装依赖库:
pip install pywin32
  1. 核心代码示例:
import win32gui
import win32console
import win32api
import win32con

def find_conhost_window(window_title):
    # 根据窗口标题找到目标conhost窗口句柄
    def callback(handle, extra):
        if win32gui.GetWindowText(handle) == window_title:
            extra.append(handle)
        return True
    handles = []
    win32gui.EnumWindows(callback, handles)
    return handles[0] if handles else None

def read_console_output(console_handle):
    # 获取控制台缓冲区信息
    buffer_info = win32console.GetConsoleScreenBufferInfo(console_handle)
    buffer_size = buffer_info['Size']
    # 读取缓冲区内容
    chars = win32console.ReadConsoleOutputCharacter(console_handle, buffer_size.X * buffer_size.Y, 0)
    # 整理成多行文本
    lines = [chars[i:i+buffer_size.X].rstrip('\x00') for i in range(0, len(chars), buffer_size.X)]
    return '\n'.join(filter(None, lines))

# 使用示例:替换为你的conhost窗口标题
target_title = "你的CMD窗口标题"
window_handle = find_conhost_window(target_title)
if window_handle:
    # 获取窗口关联的控制台句柄
    console_handle = win32api.GetWindowThreadProcessId(window_handle)[1]
    console_handle = win32console.OpenConsole(console_handle)
    output_text = read_console_output(console_handle)
    print(output_text)
else:
    print("未找到目标终端窗口")

注意:需要确保你的Python进程有足够权限访问目标终端进程,部分情况下可能需要以管理员身份运行。

方法2:模拟剪贴板复制(简易场景)

如果对稳定性要求不高,可通过模拟键盘快捷键全选并复制终端内容,再读取剪贴板。

  1. 安装依赖:
pip install pywin32 pygetwindow
  1. 核心代码示例:
import pygetwindow as gw
import win32api
import win32con
import win32clipboard
import time

def copy_terminal_text(window_title):
    # 找到目标窗口并激活
    try:
        win = gw.getWindowsWithTitle(window_title)[0]
        win.activate()
        time.sleep(0.1)  # 等待窗口激活
    except IndexError:
        print("未找到目标窗口")
        return None

    # 模拟Ctrl+A全选
    win32api.keybd_event(win32con.VK_CONTROL, 0, 0, 0)
    win32api.keybd_event(ord('A'), 0, 0, 0)
    win32api.keybd_event(ord('A'), 0, win32con.KEYEVENTF_KEYUP, 0)
    win32api.keybd_event(win32con.VK_CONTROL, 0, win32con.KEYEVENTF_KEYUP, 0)
    time.sleep(0.1)

    # 模拟Ctrl+C复制
    win32api.keybd_event(win32con.VK_CONTROL, 0, 0, 0)
    win32api.keybd_event(ord('C'), 0, 0, 0)
    win32api.keybd_event(ord('C'), 0, win32con.KEYEVENTF_KEYUP, 0)
    win32api.keybd_event(win32con.VK_CONTROL, 0, win32con.KEYEVENTF_KEYUP, 0)
    time.sleep(0.1)

    # 读取剪贴板内容
    win32clipboard.OpenClipboard()
    text = win32clipboard.GetClipboardData(win32con.CF_TEXT).decode('gbk')
    win32clipboard.CloseClipboard()
    return text

# 使用示例
target_title = "你的CMD窗口标题"
terminal_text = copy_terminal_text(target_title)
if terminal_text:
    print(terminal_text)

缺点:需要终端窗口处于前台,可能干扰用户操作,且若终端有输入焦点限制可能失效。

内容的提问来源于stack exchange,提问作者Kurt Costa Peters

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 23:11:12