【问题标题】:How to send messages from Pure Data to Python?如何将消息从 Pure Data 发送到 Python?
【发布时间】:2020-04-18 06:56:39
【问题描述】:

我正在尝试将消息从 Pure Data 发送到 Python(以在 SSD1306 OLED 上显示)。有人建议我使用套接字。他们还提供了以下 Python 代码:

import socket
s = socket.socket()
host = socket.gethostname()
port = 3000

s.connect((host, port))
mess = "hello"
Msg = mess + " ;"
s.send(message.encode('utf-8'))

在 Pure Data 中,[netreceive 3000] 对象和打印对象连接在一起。

这行得通,但我想做完全相反的事情。使用套接字将数据从 Pure Data 发送到 Python。我找到了一些教程,但他们都谈到了 Python 到 Python 的消息接收和发送。我怎样才能在其中实现 Pd?

【问题讨论】:

  • 不只是在Pd中使用[netsend]的情况吗? write.flossmanuals.net/pure-data/send-and-receive
  • 是的,我尝试在 pd 中使用 [netsend],但我不知道如何在 python 中接收消息...我尝试了 s.recv 但它仍然不起作用。我在 pd 中尝试了 [connect localhost 3000] 对象,但没有运气。

标签: python sockets puredata


【解决方案1】:

您可以使用 Python 的 socket 库连接到通过 [netsend] 发送信息的 Pd 补丁。这是一个工作最小的例子。在 Pd 中,创建一个简单的补丁,将 [netsend] 连接到您的 localhost 网络上的端口:

在 Python 中创建并保存一个侦听器脚本(改编自 here)。下面的脚本使用 Python 3.6:

import socket
import sys

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_address = ('localhost', 13001)
print(f'starting up on {server_address[0]} port {server_address[1]}')
sock.bind(server_address)
sock.listen(1)

while True:
    print('waiting for a connection')
    connection, client_address = sock.accept()
    try:
        print('client connected:', client_address)
        while True:
            data = connection.recv(16)
            data = data.decode("utf-8")
            data = data.replace('\n', '').replace('\t','').replace('\r','').replace(';','')
            print(f'received {data}')
            if not data:
                break
    finally:
        connection.close()

运行这个脚本,然后运行 ​​Pd 的补丁。拖动该数字框会将值发送到 Python。在上面的这个例子中,所有接收到的值都只是打印了它们的标签:

然后您可以根据自己的需要调整这些内容。

【讨论】:

    猜你喜欢
    • 2021-06-15
    • 1970-01-01
    • 1970-01-01
    • 2013-05-23
    • 1970-01-01
    • 2016-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多