を使ってPythonにNodeJSからTypedArrayデータを送信します。私のPythonスクリプトにはfloat32配列が必要ですが、python-shellを使ってそのデータ型を送信する方法がわかりません。私は問題なく文字列を送ることができ、私は私のpythonスクリプトがうまく動作することを知っています。直接配列を送信する方法があるのですか、またはPythonでデータの変換や解析を行う必要がありますか?ここで最善の方法は、私のpython-シェルを使用してPythonで処理するNodeJSからデータを送信しようとしているのpython-シェル
は、私が今しようとしていますものです:Pythonで
:ノードで
import sys
input = sys.stdin.read()
print type(input)
:
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)
TypedArrを変換すると文字列を渡すのはうまくいきますが、配列ではなくPythonでこの長い文字列を受け取るのは間違いです。私は単純な修正があると確信しています。どんなアドバイスも大変ありがとう!
多分これは役立ちますか? https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer メッセージは、あなたが移動するための方法であるべきバッファオブジェクトを、使用することができます示唆しています。 – sapht
私はこれが最善の選択肢のように思われることに同意します。私がJSバッファ(例えばBuffer.from( 'test'))を送信した場合、上記のエラーは発生せず、成功コールバックはpyshell.send()呼び出しでヒットしますが、何らかの理由でPythonスクリプトが実行される。私はそれが{mode: 'binary'}の使用と関係しているのだろうかと思いますか?私はまだバッファのための実用的なバイナリモードを持っていません – milesaron
ありがとうございます。 SOが私にできるように2日で私の答えを受け入れる... – milesaron