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

如何让Python实现类似Tcl/expect的执行命令实时输出功能?

在Python的pexpect中实现类似Tcl/expect的默认输出功能

Tcl/expect默认会同时打印发送的命令和子进程返回的输出,在pexpect中可以通过配置logfile和logfile_send属性实现相同效果,以下是具体实现方式:

输出到控制台

通过将这两个属性指向标准输出的字节流缓冲区,就能让所有交互内容实时打印到控制台:

#!/usr/bin/env python3
import pexpect
import sys

shellprompt = "] # "

# 启动SSH进程
child = pexpect.spawn('ssh admin@XYZ')
# 捕获子进程返回的输出并输出到控制台
child.logfile = sys.stdout.buffer
# 捕获发送给子进程的命令并输出到控制台
child.logfile_send = sys.stdout.buffer

child.sendline('ls')
child.expect(shellprompt)

# 若仍需单独提取命令输出,可继续使用child.before
ls_out = child.before.decode()

说明:

  • logfile负责记录从子进程接收到的所有内容
  • logfile_send负责记录你发送给子进程的所有内容
  • 使用sys.stdout.buffer是因为pexpect的日志属性要求接收字节流对象,而非文本流

输出到文件

如果需要将内容保存到文件,只需将属性指向一个以二进制模式打开的文件对象即可:

#!/usr/bin/env python3
import pexpect

shellprompt = "] # "

# 以二进制模式打开日志文件
with open('ssh_interaction.log', 'wb') as log_file:
    child = pexpect.spawn('ssh admin@XYZ')
    child.logfile = log_file
    child.logfile_send = log_file

    child.sendline('ls')
    child.expect(shellprompt)

这样所有发送的命令和返回的输出都会被写入到指定文件中。

内容的提问来源于stack exchange,提问作者singleX

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 18:55:22