9

我有一种情况,我需要一个 python 脚本在一个连续循环中运行,并且我需要从另一个脚本传递参数到它,该脚本将在一个动作发生时运行。

第二个脚本将由使用 cgi 的网站触发,我可以正常工作。连续循环应该接受 cgi 脚本读取的参数(然后通过串行端口发送信息)。

对于特定问题,我不能让 cgi 脚本直接通过串行发送数据,因为每次运行它都会重置串行端口。

我似乎找不到有关这种设置的任何信息。是否有任何方法或库我可以研究这个或更好的方法来处理它?

4

2 回答 2

10

我会使用套接字连接。本质上,您正在编写一个非常简单的服务器,一次只需要一个连接

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("localhost", 9988))
s.listen(1)

while True:
    conn, addr = s.accept()
    data = conn.recv(1024)
    conn.close()
    my_function_that_handles_data(data)

s.accept()是阻塞调用。它等待连接。然后你阅读连接。在这种情况下,我们假设参数的长度只有 1024 字节。然后我们对从套接字接收到的数据做一些事情并等待另一个连接。

客户端可能如下所示:

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("localhost", 9988))
s.sendall('My parameters that I want to share with the server')
s.close()

这样做的好处是,如果将来客户端和服务器不再在同一台机器上运行,那么只需更改"localhost"为您要访问的实际 IP 地址或域名即可。

于 2013-09-04T14:24:07.670 回答
2

您所描述的一般概念称为进程间通信(Python IPC)。

在 python 中,这可以通过套接字信号来完成。

还有建立在/使用套接字之上的更高级别的接口;asyncoreasynchat

于 2013-09-04T14:24:13.847 回答