今回は、Node.jsとPythonの間でデータのやり取りを簡単にできる「python-shell」について学習をしていきましょう!
Ndoe.jsとPython相互間のデータ共有を簡単に行いたい
Node.jsとPythonの違いを知りたい
このような内容も含めて、本記事では以下のような構成で解説していきます!
- 【基礎】「python-shell」とは?
- 【基礎】「python-shell」の使い方
- 【実践】Node.jsでPythonコードを実行
- 【実践】Node.jsとPython相互データ共有
この記事で、python-shellをしっかり学習してスキルアップを目指していきましょう!
本記事を読む前に、Pythonがどんなプログラミング言語なのかをおさらいしておきたい人は次の記事を参考にしてください。
→ Pythonとは?特徴やできること、活用例をわかりやすく簡単に解説
なお、その他のPythonの記事についてはこちらにまとめています。
「python-shell」とは?
「python-shell」は、Node.jsからPythonのコードやファイルを実行することができるモジュールです。さらに単純な実行だけでなく、Pythonのファイルへデータを送信したり逆にPythonからNode.jsにデータを受信することもできる万能ツールです。
データのやり取りは、シンプルな標準入出力ストリームを介したデータ転送のため、非常に軽量で高速な処理ができる点が特徴です。本記事では、基本的な使い方から実際のデータ送受信まで学習できるように構成しているのでぜひ参考にしてみてください!
「python-shell」の使い方
この章では、python-shellを利用するにあたり必要な準備や基本的な使い方についてみていきましょう。主に、導入方法やPythonコード・ファイルの実行手法について学んでいきます。
python-shellの導入方法
まずは、python-shellを利用するための導入方法から見ていきましょう。導入については簡単でnpmから次のコマンドを実行します。
npm install python-shell
これでpython-shellが自分の環境に導入できました。次に、Node.jsから利用できるようにするため、require()を使って次のように記述します。
var {PythonShell} = require('python-shell');
これで、Node.jsのプログラムからpython-shellが利用できるようになりました。
Node.jsからPythonコードを実行する方法
それでは早速ですが、python-shellを使って任意のPythonプログラムを実行してみましょう!もっとも簡単な方法としてはrunString()メソッドを利用して、Pythonプログラムの文字列を直接指定する方法です。
次のような構文になります!
PythonShell.runString(実行したいコード, オプション, 関数処理)
第1引数に指定するコードは、Pythonプログラムを文字列で記述したものになる点に注意しましょう。例えば、次のサンプル例を見てください!
PythonShell.runString('print("Hello Python")', null, function (err, result) { if (err) throw err; console.log(result); });
実行結果
Hello Python
この例では、Pythonプログラムで「print(“Hello Python”)」を実行しています。
コールバック関数において、エラー情報が格納されている「err」と、 Pythonコードの実行結果を格納している「result」という引数を取得できます。実行結果を見ると、見事にPythonプログラムの実行結果を得られているのが分かりますね。
Node.jsからPyhtonファイルを実行する方法
今度は、Pythonファイルを直接指定してプログラムを実行してみましょう!
利用するのはrun()メソッドです! 構文は先ほどのrunString()と同じですが、第1引数にPythonファイルのパスを次のように指定します。
PythonShell.run('sample.py', null, function (err, result) { if (err) throw err; console.log(result); });
この例では、「sample.py」というファイル名のPythonプログラムが書かれたファイルを設定しています。このPythonプログラムが例えばprint()などを利用してコンソールに出力するような処理が記述されていれば、コールバック関数の引数「result」に格納されるというわけです。
Node.jsとPythonのデータ連携
この章では、Node.jsとPythonの間でデータを相互に連携する方法について見ていきましょう! 主に、文字列や数値などの値を相互に連携する手法について学んでいきます。
Node.jsとPythonの間でデータを送受信する方法
それでは、データを相互に連携するための方法について見ていきましょう! 今回利用するのは「send()」メソッドと「on()」メソッドになります。
簡単に説明すると、send()でデータを送信してon()でデータを受信することになります。実際のプログラムで書くと次のようになります!
var pyshell = new PythonShell('sample.py'); pyshell.send(【送信したいデータ】); pyshell.on('message', 【コールバック関数】);
最初にPythonShell()のインスタンスを生成するときに、送信するPythonプログラムのファイルパスを指定しておきましょう。on()で受信した内容はコールバック関数内で受けとることができるようになります。
文字列や数値をデータ連携してみる
実際にサンプル例を作成してNode.jsとPythonでデータを相互に連携してみましょう! 先ほど解説したプログラム例を参考にして、例えば「太郎」という文字列をPythonプログラムに送信するには次のように記述します。
var pyshell = new PythonShell('sample.py'); pyshell.send('太郎'); pyshell.on('message', function (data) { console.log(data); });
PythonShell()のインスタンスを生成する際に、送信するPythonファイルを指定していますね。「send(‘太郎’)」と記述することで、文字列「太郎」という値をPythonプログラムに送信することができます。
そして、on()の「message」イベント内のコールバック関数で、今度はPythonプログラムからのデータを受信することができるわけです。Pythonのプログラムでは、標準入力からのデータを取得する処理を記述すればOKです!
import sys data = sys.stdin.readline() print('こんにちは、' + data + 'さん')
このように「stdin.readline()」でNode.jsの「send()」メソッドを使って送信したデータをPython側から受け取れます。Node.jsのプログラムを実行すると、「こんにちは、太郎さん」という文章が出力されるのが分かります。
まとめ
今回は、Node.jsとPythonの間でデータを連携できる「python-shell」の使い方について学習しました! 最後に、もう一度ポイントをおさらいしておきましょう!
- python-shellを使うとPythonプログラムやファイルをNode.jsから実行できる
- Node.jsから直接Pythonを実行するにはrunString()を使う
- データを連携するにはsend()とon()を使って送受信する
上記内容を踏まえて、ぜひ自分でもプログラミングに取り入れて活用できるように頑張りましょう!