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

Python使用pexpect调用终端应用时如何正确发送字符串

问题根因

pexpect 的spawn实例默认工作在二进制模式下,直接传递字符串给sendline()方法会出现类型不匹配,导致内容发送失败,你代码里返回的b''空字节对象也验证了当前是二进制工作模式。


解决方案

方案1:指定编码让pexpect自动处理字符串(推荐)

在初始化spawn实例时指定encoding参数,让pexpect自动完成字符串和字节流的编解码转换,无需手动处理编码:

import pexpect
import sys

# 新增encoding=utf-8参数,开启文本模式
child = pexpect.spawn("./helium-wallet create basic --seed mobile", encoding="utf-8")
# 文本模式下直接绑定sys.stdout即可,不需要用buffer
child.logfile_read = sys.stdout
child.expect("Space separated seed words: ")
# 直接传字符串即可,pexpect会自动编码
child.sendline("carpet again stick economy finish recipe blouse forward program stumble need ginger")
# 等待命令执行完成输出所有结果
child.expect(pexpect.EOF)

print(child.before)

方案2:手动编码字符串为字节流发送

如果你不想修改spawn的初始化参数,也可以在调用sendline时手动将字符串编码为utf-8字节流:

import pexpect
import sys

child = pexpect.spawn("./helium-wallet create basic --seed mobile")
child.logfile_read = sys.stdout.buffer
child.expect("Space separated seed words: ")
# 手动将字符串编码为字节后发送
child.sendline("carpet again stick economy finish recipe blouse forward program stumble need ginger".encode("utf-8"))
child.expect(pexpect.EOF)

print(child.before)

两种方案执行后都可以正常拿到helium-wallet返回的完整创建结果,不会再出现空字节输出的问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 03:24:04