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

如何使用pexpect实现两个Python脚本间的消息通信?

用pexpect实现两个Python脚本通信的解决方案

问题分析

你的代码无法捕获响应的核心原因:发送消息后未等待子进程(script_2)输出完成就读取内容,导致拿到的是第一次匹配>之前的空内容,而非script_2的回显。

最小可用示例

修正后的script_1.py

# script_1.py
import pexpect

# 替换为script_2.py的实际路径
child = pexpect.spawn("python /path/to/script/script_2.py")
# 等待script_2输出的提示符号">"
child.expect(">")
# 获取用户输入并发送给script_2
msg = input("Message to the other script: ")
child.sendline(msg)
# 等待子进程结束(EOF),捕获所有输出
child.expect(pexpect.EOF)
# 解码并打印script_2的回显内容
print("Received from script_2:", child.before.decode().strip())

script_2.py(可直接使用)

# script_2.py
indata = input(">") 
print(indata)

运行逻辑

  1. script_1启动script_2进程,等待其输出提示符号>
  2. 用户输入消息,script_1发送给script_2
  3. script_2接收消息并回显,随后进程退出
  4. script_1捕获script_2的输出并打印

扩展为多次通信场景

如果需要持续交互而非单次通信,可修改脚本实现循环:

扩展版script_2.py

# script_2.py - 支持持续通信
while True:
    try:
        indata = input(">")
        # 自定义回复逻辑,这里以添加前缀为例
        print(f"Echo: {indata}")
    except EOFError:
        # 子进程关闭时退出循环
        break

扩展版script_1.py

# script_1.py - 支持持续通信
import pexpect

child = pexpect.spawn("python /path/to/script/script_2.py")
while True:
    # 等待script_2的输入提示
    child.expect(">")
    msg = input("Enter message (type 'exit' to quit): ")
    if msg.lower() == "exit":
        child.sendline(msg)
        child.expect(pexpect.EOF)
        print("Connection closed.")
        break
    child.sendline(msg)
    # 等待script_2的回复换行,捕获回复内容
    child.expect("\n")
    response = child.before.decode().strip()
    print(f"Script_2 response: {response}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 01:57:03