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

将可用Expect脚本转换为Pexpect以支持回车键操作遇阻

问题:Pexpect转换Expect脚本时进程卡顿或无输出

我有一个通过autoexpect生成的可正常运行的Expect脚本,功能是等待密码提示并按回车键跳过钱包加密。但用Python 3的pexpect库转换后出现问题,要么进程卡住无响应,要么直接关闭没有输出。

原Expect脚本

set timeout -1
spawn ./electron-cash --dir ""  create
match_max 100000
expect -exact "Password (hit return if you do not wish to encrypt your wallet):"
send -- "\r"
expect eof

存在问题的Pexpect代码

import pexpect 
import sys

python_exec = "/home/user/electron-cash-wallet/venv/bin/python"
command = "/home/user/electron-cash-wallet/src/Electron-Cash/electron-cash"


p = pexpect.spawn(python_exec, [command, "--scalenet", "create"])
# ~ p.logfile_read = sys.stdout.buffer 

p.expect("Password (hit return if you do not wish to encrypt your wallet):")

p.sendline(b'\r')

p.expect(pexpect.EOF)

修复方案

1. 对齐原脚本的精确匹配逻辑

原Expect脚本用expect -exact做精确匹配,普通的p.expect()会按正则表达式匹配,可能因输出中的隐藏字符(如空格、换行)导致匹配失败。改用p.expect_exact()方法,确保完全匹配目标字符串。

2. 修正发送字符的格式与行为

sendline(b'\r')传入字节串无必要,且sendline会自动追加换行符,和原脚本的send -- "\r"行为不一致。直接用p.send('\r')发送回车符,和原脚本逻辑对齐。

3. 开启调试日志排查问题

取消注释p.logfile_read = sys.stdout.buffer,可实时查看进程的所有输出,快速定位是未出现预期提示,还是有其他输出干扰匹配。

4. 设置永不超时

原Expect脚本设置了timeout -1,Pexpect默认超时30秒,若进程输出较慢会触发超时退出。在spawn时添加timeout=None参数,保持和原脚本一致的永不超时逻辑。

修复后的代码示例

import pexpect 
import sys

python_exec = "/home/user/electron-cash-wallet/venv/bin/python"
command = "/home/user/electron-cash-wallet/src/Electron-Cash/electron-cash"

# 开启日志调试,查看进程所有输出
p = pexpect.spawn(python_exec, [command, "--scalenet", "create"], timeout=None)
p.logfile_read = sys.stdout.buffer 

try:
    # 精确匹配目标提示字符串
    p.expect_exact("Password (hit return if you do not wish to encrypt your wallet):")
    # 发送回车跳过加密
    p.send('\r')
    # 等待进程结束
    p.expect(pexpect.EOF)
except pexpect.TIMEOUT:
    print("等待超时,当前进程输出:", p.before.decode())
except pexpect.EOF:
    print("进程提前结束,输出内容:", p.before.decode())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 11:20:33