如何实现两个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
相关产品推荐
相关产品推荐

