gpt4 book ai didi

python - 使用 python-shell 将 TypedArray 数据从 NodeJS 发送到 Python 的最佳方法

转载 作者:太空宇宙 更新时间:2023-11-03 14:33:16 25 4
gpt4 key购买 nike

我正在尝试使用 python-shell 从 NodeJS 发送数据以在 Python 中进行处理。我的 Python 脚本需要 float32 数组,但我不确定如何使用 python-shell 发送该数据类型。我可以毫无问题地发送字符串,并且我知道我的 python 脚本在其他情况下工作正常。有没有办法直接发送数组或者我需要在python中进行一些数据转换或解析?

这是我现在正在尝试的:

在Python中:

import sys
input = sys.stdin.read()
print type(input)

在 Node 中:

var PythonShell = require('python-shell');
var pyshell = new PythonShell('script.py', {mode:'binary'});
// data is float32 TypedArray
pyshell.send(data).end(function(err){
if (err){console.log(err, 'did not work')};
});
pyshell.on('message', function (message) {
console.log('message received', message);
});

这里我收到以下错误:

net.js:655
throw new TypeError(
^

TypeError: Invalid data, chunk must be a string or buffer, not object
at Socket.write (net.js:655:11)
at PythonShell.send (/project/node_modules/python-shell/index.js:205:16)
at Object.<anonymous> (/project/server.js:59:11)
at Module._compile (module.js:570:32)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3)
at Module.runMain (module.js:604:10)
at run (bootstrap_node.js:394:7)

如果我将 TypedArray 转换为字符串,它发送得很好,但在 Python 中接收这个长字符串而不是数组感觉不对。我确信有一个简单的修复方法。任何建议将不胜感激!

最佳答案

最后我将 float32 数组转换为 javascript Buffer 对象并使用“二进制”模式。另外我需要从 pyshell.on 切换到 pyshell.stdout.on ,它位于二进制模式的 python-shell 测试脚本中,但不在自述文件中...

在 Node 中:

var options = {mode: 'binary'};
var pyshell = new PythonShell('test.py', options);
var data = Buffer.from(myFloat32TypedArray.buffer, 'float32');

pyshell.send(data).end((err) => {
if (err){
console.log(err);
}else{
console.log('data sent');
};
});

pyshell.stdout.on('data', function (data) {
console.log(data);
});

在Python中:

input_data = np.frombuffer(sys.stdin.read(), dtype=np.float32)
sys.stdout.write(input_data)

关于python - 使用 python-shell 将 TypedArray 数据从 NodeJS 发送到 Python 的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47124800/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com