如何将 python 程序的输出传递给处理程序
How to pass output from a python program into a processing program
我正在通过可以输出字符串位置的 python 程序读取陀螺仪 (sense-hat) 的方向。我正在尝试将此数据用作处理程序中的输入,以使其根据陀螺仪的方向进行交互。我如何让 Processing 与 python 程序交互?
我在 bash 脚本中使用了以下代码片段来获取 python 程序的输出。我希望这有帮助。
OUTPUT="$(python your_program.py)"
print($OUTPUT)
我以前从未使用过 Sense HAT,但我猜它在幕后使用 I2C。从理论上讲,应该可以使用它的 I2C io library, but in practice it may take quite a bit of effort, looking at the sense-hat library uses RTIMU 和它自己执行的所有花式过滤来重新实现 Processing 中的代码。
要让您的 Python 程序与 Processing 对话,您至少有两个选择:
- pipe the output 从 python 程序进入 Processing 的
stdin
并解析通过 的内容
- 使用套接字。
第二个选项应该更简单,我可以想到多个选项:
我再次推荐第二个选项:UDP 非常快,而且 OSC 使传递带参数的消息变得容易。
Python 脚本将:
- 投票方向数据
- 通过
/orientation
等消息分享方向值
处理草图将:
- 做OSC Server服务器等待数据
- 从接收到的
/orientation
消息中获取 3 个浮点参数并绘制
这是 未经测试的 概念验证发件人脚本 Python:
import time
from sense_hat import SenseHat
from OSC import OSCClient, OSCMessage
#update 60 times a second -> feel free to adjust this what works best
delay = 1.0/60.0
# sense hat
sense = SenseHat()
# OSC client -> Processing
client = OSCClient()
client.connect( ("localhost", 12000) )
while True:
# read sense hat
orientation = sense.get_orientation_degrees()
print("p: {pitch}, r: {roll}, y: {yaw}".format(**orientation))
# send data to Processing
client.send( OSCMessage("/orientation", [orientation["pitch"],orientation["roll"],orientation["yaw"] ] ) )
# wait
time.sleep(delay)
和处理接收器:
import oscP5.*;
import netP5.*;
OscP5 oscP5;
float pitch,roll,yaw;
void setup() {
size(400,400,P3D);
frameRate(25);
/* start oscP5, listening for incoming messages at port 12000 */
oscP5 = new OscP5(this,12000);
}
void draw() {
background(0);
text("pitch: " + pitch + "\nroll: " + roll + "\nyaw: " + yaw,10,15);
}
/* incoming osc message are forwarded to the oscEvent method. */
void oscEvent(OscMessage message) {
message.print();
if(message.checkAddrPattern("/orientation")==true) {
/* check if the typetag is the right one. -> expecting float (pitch),float (roll), float (yaw)*/
if(message.checkTypetag("fff")) {
pitch = message.get(0).floatValue();
roll = message.get(1).floatValue();
yaw = message.get(2).floatValue();
}
}
}
注意您需要先安装 PyOSC 和 运行 Processing sketch,否则您可能会收到关于 OSCClient 的 Python 错误无法连接。这个想法是 Processing 成为一个 OSC Server 而 Python Script 是一个 OSCClient 并且服务器需要可供客户端连接。 (如果需要,您可以将 Python 脚本设为 OSC 服务器,如果这样更适合您,则可以将 Processing sketch 设为客户端)
要安装 PyOSC,请尝试:
sudo pip install pyosc
否则:
cd ~/Downloads
wget https://pypi.python.org/packages/7c/e4/6abb118cf110813a7922119ed0d53e5fe51c570296785ec2a39f37606d85/pyOSC-0.3.5b-5294.tar.gz
tar xvzf pyOSC-0.3.5b-5294.tar.gz
cd pyOSC-0.3.5b-5294
sudo python setup.py install
同样,以上内容未经测试,但想法是:
- 下载库
- 解压缩
- 导航到解压缩的文件夹
- 通过
sudo python setup.py install
安装
我正在通过可以输出字符串位置的 python 程序读取陀螺仪 (sense-hat) 的方向。我正在尝试将此数据用作处理程序中的输入,以使其根据陀螺仪的方向进行交互。我如何让 Processing 与 python 程序交互?
我在 bash 脚本中使用了以下代码片段来获取 python 程序的输出。我希望这有帮助。
OUTPUT="$(python your_program.py)"
print($OUTPUT)
我以前从未使用过 Sense HAT,但我猜它在幕后使用 I2C。从理论上讲,应该可以使用它的 I2C io library, but in practice it may take quite a bit of effort, looking at the sense-hat library uses RTIMU 和它自己执行的所有花式过滤来重新实现 Processing 中的代码。
要让您的 Python 程序与 Processing 对话,您至少有两个选择:
- pipe the output 从 python 程序进入 Processing 的
stdin
并解析通过 的内容
- 使用套接字。
第二个选项应该更简单,我可以想到多个选项:
我再次推荐第二个选项:UDP 非常快,而且 OSC 使传递带参数的消息变得容易。
Python 脚本将:
- 投票方向数据
- 通过
/orientation
等消息分享方向值
处理草图将:
- 做OSC Server服务器等待数据
- 从接收到的
/orientation
消息中获取 3 个浮点参数并绘制
这是 未经测试的 概念验证发件人脚本 Python:
import time
from sense_hat import SenseHat
from OSC import OSCClient, OSCMessage
#update 60 times a second -> feel free to adjust this what works best
delay = 1.0/60.0
# sense hat
sense = SenseHat()
# OSC client -> Processing
client = OSCClient()
client.connect( ("localhost", 12000) )
while True:
# read sense hat
orientation = sense.get_orientation_degrees()
print("p: {pitch}, r: {roll}, y: {yaw}".format(**orientation))
# send data to Processing
client.send( OSCMessage("/orientation", [orientation["pitch"],orientation["roll"],orientation["yaw"] ] ) )
# wait
time.sleep(delay)
和处理接收器:
import oscP5.*;
import netP5.*;
OscP5 oscP5;
float pitch,roll,yaw;
void setup() {
size(400,400,P3D);
frameRate(25);
/* start oscP5, listening for incoming messages at port 12000 */
oscP5 = new OscP5(this,12000);
}
void draw() {
background(0);
text("pitch: " + pitch + "\nroll: " + roll + "\nyaw: " + yaw,10,15);
}
/* incoming osc message are forwarded to the oscEvent method. */
void oscEvent(OscMessage message) {
message.print();
if(message.checkAddrPattern("/orientation")==true) {
/* check if the typetag is the right one. -> expecting float (pitch),float (roll), float (yaw)*/
if(message.checkTypetag("fff")) {
pitch = message.get(0).floatValue();
roll = message.get(1).floatValue();
yaw = message.get(2).floatValue();
}
}
}
注意您需要先安装 PyOSC 和 运行 Processing sketch,否则您可能会收到关于 OSCClient 的 Python 错误无法连接。这个想法是 Processing 成为一个 OSC Server 而 Python Script 是一个 OSCClient 并且服务器需要可供客户端连接。 (如果需要,您可以将 Python 脚本设为 OSC 服务器,如果这样更适合您,则可以将 Processing sketch 设为客户端)
要安装 PyOSC,请尝试:
sudo pip install pyosc
否则:
cd ~/Downloads
wget https://pypi.python.org/packages/7c/e4/6abb118cf110813a7922119ed0d53e5fe51c570296785ec2a39f37606d85/pyOSC-0.3.5b-5294.tar.gz
tar xvzf pyOSC-0.3.5b-5294.tar.gz
cd pyOSC-0.3.5b-5294
sudo python setup.py install
同样,以上内容未经测试,但想法是:
- 下载库
- 解压缩
- 导航到解压缩的文件夹
- 通过
sudo python setup.py install
安装