如何让python脚本监听来自另一个脚本的输入

Ger*_*Ger 8 python cgi serial-port

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

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

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

我似乎无法找到有关此类设置的任何信息.是否有任何方法或库可供我们研究这种或更好的方法来接近它?

ayc*_*dee 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)
Run Code Online (Sandbox Code Playgroud)

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()
Run Code Online (Sandbox Code Playgroud)

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

  • 这看起来可能很完美,我以前偶然发现过套接字,但不确定它们如何工作或如何使用它们,感谢您提供的简单示例。稍后会尝试一下。 (2认同)
  • 下一步是创建一个存储连接的服务器,并在每次从中读取数据时使用epoll通知.在你知道它之前,你已经编写了一个异步套接字服务器. (2认同)
  • 当您对资源有很高的需求时(例如:许多并发用户),Asyncronicity(epoll)非常有用.当一个用户正在等待特定资源时,服务器进程可以为下一个用户提供服务,或者处理其他资源.如果您的网站是供单个用户控制四轴飞行器,那么阻塞(等待资源)应该不是问题. (2认同)