ということは、Node.jsクラスであるPlaywright browserオブジェクトなりpageオブジェクトなりelementオブジェクトなりを、Python-shell経由でPython関数の引数としても渡せるのでしょうか?
ライブラリの公式README.mdを読め案件ですね。
勘所がわからないと結構見つけるのが大変ですので、今回は一緒に読んでいきましょう。
まずは上の日本語の記事でふんわり確認します。
Node.jsとPythonの間でデータを送受信する方法
それでは、データを相互に連携するための方法について見ていきましょう! 今回利用するのは「send()」メソッドと「on()」メソッドになります。
簡単に説明すると、send()でデータを送信してon()でデータを受信することになります。実際のプログラムで書くと次のようになります!
js
1var pyshell = new PythonShell('sample.py');
2pyshell.send(【送信したいデータ】);
3pyshell.on('message', 【コールバック関数】);
なるほど、一度newしてインスタンスを作ったら、
send
でデータを流し込めて、
on
でイベント登録して何か起こったらJSのコードに帰ってこれるようになっているわけだ。
では本家のドキュメントで確認してみましょう。
send
メソッドで検索すれば一撃です。
Exchanging data between Node and Python:
サンプルコードを見るに侍エンジニア塾ブログのコードとほぼ同じようです。
そしてその下にsend
で送信出来るメッセージのルールが記載されています。
Use options.mode to quickly setup how data is sent and received between your Node and Python applications.
- use text mode for exchanging lines of text ending with a newline character.
- use json mode for exchanging JSON fragments
- use binary mode for anything else (data is sent and received as-is)
new PythonShell('sample.py')
には第2引数のoptions
が存在します。
options.mode
を指定する事で、以下の3パターンのデータを流し込む事が可能です。
- text: 改行コード付きのStringを送信する
- json: JSONデータを送信する
- binary: stdin(標準入力)でバイナリデータを流し込む
Python側のコードはGitHubのtestディレクトリ内にあるpythonファイルを開いて見てくれだそうです。
かなりシンプル、やる気のないコードが記述されてました。
まぁPythonが獲物のエンジニアなら開発できそうではあります。
というわけで回答
プリミティブ型ではなくクラス型オブジェクトであっても、Node.jsにもPythonにも同じクラスが用意されているような場合はPython-shellがよしなにラップしてくれますか?
無理です!
python-shellはバイナリデータやJSON文字列飛ばすのが関の山です。
まぁ、テキストを投げ込んだらPythonで代わりにライブラリを使ってデータを生成
結果のテキストをNode.jsに投げ返して.on("message", fn)
で受け取るという一連の流れは使えるので、
Promiseなんかでラッピングすれば普通にasync/awaitで処理する関数には加工して使えるようになるでしょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/12/13 12:06 編集