Python“Send2Pd”没有达到 Pure Data 的“Netreceive”

问题描述

我需要从 Python 向 Pure Data 发送消息,所以我关注了 this 文章。 它工作正常,直到有一天突然停止工作。 纯数据不再接收任何东西,我已经在 Mac 和 Linux 环境中尝试过

上传了脚本和补丁here: 但等效的代码是:

import os
os.system("echo '1;' | pdsend 3000")

并且 Puredata 应该使用简单的方式接收消息 netreceive 3000

看起来 Python 和 Pure Data 找不到通信路径。 在我尝试将 pdsend 更改为绝对路径后,如下所示:

import os
os.system("echo '1;' | /Users/path_to_pure_data/PureData.app/Contents/Resources/bin/pdsend 3000")

它有效。

此时我不知道为什么 Python 不会自动找到它的路径,以及如何修复它。

解决方法

Python 如何知道它应该在 /Users/path_to_pure_data/PureData.app/Contents/Resources/bin/ 中查找可执行文件?

出于安全(和性能)原因,系统将仅在 PATH 环境变量中定义的几个选定位置搜索可执行文件。

您可以将 /Users/path_to_pure_data/PureData.app/Contents/Resources/bin/ 添加到您的 PATH 中,或者将 pdsend 放入已经搜索过的路径中。

然而,这在任何情况下似乎都有些矫枉过正,因为调用外部应用程序的成本相当高,而使用 os.system 可能是最糟糕的选择之一。

Python 是一种强大的编程语言,使用 Python 本身构建客户端代码非常容易。 例如,这段代码没有任何外部依赖,执行速度更快,而且更安全(我想说。它也更容易阅读):

import socket

s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("localhost",3000))
s.sendall(b'1;')
s.close()