向运行中的Python脚本直接发送数据的常规方案及选型建议
直接向Python服务端发送文本数据的实现方案
常规实现方式
- 针对小型同步场景,常用的无文件中转方案有两种:TCP/UDP Socket通信和本地命名管道(FIFO)。
- 若需要跨机器通信,优先选Socket;仅本地进程间交互的话,命名管道更轻量。
- 不需要引入复杂框架,用Python标准库就能实现。
Python Sockets是否合适?
完全合适。你的项目不需要异步处理,同步TCP Socket的实现非常简单,代码量少,足够满足需求,是这类场景的常规选择。
示例代码
同步TCP服务端(替代文件监控逻辑)
import socket HOST = '127.0.0.1' # 仅本地访问,需对外开放改0.0.0.0 PORT = 65432 with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.bind((HOST, PORT)) s.listen() print(f"服务端启动,监听 {HOST}:{PORT}") while True: conn, addr = s.accept() with conn: print(f"客户端连接: {addr}") while True: data = conn.recv(1024) if not data: break # 替换为你的数据处理逻辑 received_text = data.decode('utf-8') print(f"收到数据: {received_text}") # 可选:返回接收确认 conn.sendall(b"数据已接收")
客户端(发送文本数据)
import socket HOST = '127.0.0.1' PORT = 65432 with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.connect((HOST, PORT)) send_text = "需要处理的文本内容" s.sendall(send_text.encode('utf-8')) # 可选:接收服务端确认 data = s.recv(1024) print(f"服务端回复: {data.decode('utf-8')}")
本地场景备选:命名管道(FIFO)
仅本地进程通信时,命名管道比Socket更轻量:
服务端(读取管道)
import os FIFO_PATH = '/tmp/my_fifo' if not os.path.exists(FIFO_PATH): os.mkfifo(FIFO_PATH) print("服务端等待数据...") while True: with open(FIFO_PATH, 'r') as fifo: for line in fifo: line = line.strip() print(f"收到管道数据: {line}")
客户端(写入管道)
FIFO_PATH = '/tmp/my_fifo' with open(FIFO_PATH, 'w') as fifo: fifo.write("要发送的文本内容\n")
总结
你的小型同步项目,优先选TCP Socket(支持本地/跨机器)或命名管道(仅本地),两者都能替代文件中转,实现直接数据传输,代码简单易维护。
内容的提问来源于stack exchange,提问作者johntheripper22
相关产品推荐
相关产品推荐

