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

如何实现两个Python脚本通过Pipe管道跨Shell通信?

实现script2.py与script1.py的FIFO通信

以下是能向script1.py发送数据的script2.py实现代码:

import os
import errno

# 必须与script1.py使用相同的管道名称
IPC_FIFO_NAME_A = "pipe_a"

try:
    # 以只写模式打开FIFO管道
    fifo_a = os.open(IPC_FIFO_NAME_A, os.O_WRONLY)
except OSError as e:
    if e.errno == errno.ENOENT:
        print("错误:管道尚未创建,请先启动script1.py")
        exit(1)
    # 其他异常直接抛出
    raise

# 准备要发送的数据,必须是字节类型(用b前缀或encode()转换)
send_data = b"Test message from script2"
# 写入数据到管道
os.write(fifo_a, send_data)

# 关闭管道句柄
os.close(fifo_a)

关键说明:

  • 管道名称一致性:必须和script1.py中的IPC_FIFO_NAME_A完全一致,否则无法找到对应的管道
  • 数据格式:os.write要求写入的是字节数据,所以字符串需要用b""前缀或者.encode("utf-8")转换为字节流
  • 运行顺序:必须先启动script1.py(它负责创建FIFO管道),再启动script2.py;如果先启动script2.py,会因管道不存在抛出异常
  • 与script1的适配:script1.py设置了非阻塞读取,且每次只读1字节,所以发送的内容会被逐字节打印出来

扩展建议:

如果需要发送结构化数据(比如字典、列表),可以先将数据序列化为JSON字符串,再转成字节发送:

import json

data_dict = {"name": "script2", "value": 123}
send_data = json.dumps(data_dict).encode("utf-8")
os.write(fifo_a, send_data)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 21:15:05