【Node.js入門】python-shellによるNode.jsとPythonのデータ連携方法まとめ

今回は、Node.jsとPythonの間でデータのやり取りを簡単にできる「python-shell」について学習をしていきましょう!

Node.jsからPythonへデータを送りたい場合はどうすればいいの?
Ndoe.jsとPython相互間のデータ共有を簡単に行いたい
Node.jsとPythonの違いを知りたい

このような内容も含めて、本記事では以下のような構成で解説していきます!

  • 【基礎】「python-shell」とは?
  • 【基礎】「python-shell」の使い方
  • 【実践】Node.jsでPythonコードを実行
  • 【実践】Node.jsとPython相互データ共有

この記事で、python-shellをしっかり学習してスキルアップを目指していきましょう!

「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()を使って送受信する

上記内容を踏まえて、ぜひ自分でもプログラミングに取り入れて活用できるように頑張りましょう!

LINEで送る
Pocket

「プログラミング、右も左もわからない…」という方にオススメ

当プログラミングスクール「侍エンジニア塾」では、これまで6000人以上のエンジニアを輩出してきました。

その経験を通してプログラミング学習に成功する人は、「目的目標が明確でそれに合わせた学習プランがあること」「常に相談できる人がそばにいること」「自己解決能力が身につくこと」この3つが根付いている傾向を発見しました。

侍エンジニア塾は上記3つの成功ポイントを満たすようなサービス設計に磨きをかけております。

cta_under_bnr

「自分のスタイルや目的に合わせて学習を進めたいな」とお考えの方は、ぜひチェックしてみてください。

書いた人

マサト

マサト

フリーランスのIT系ライターを10年従事する兵庫県出身の40歳。侍ブログ編集部としては、これまで270記事以上を執筆。
30歳を過ぎてから独学でJavaScript, Node.js, Linuxを習得した経験を活かし、初心者が迷わない記事作成を意識しながらプログラミングの楽しさを知ってもらうために活動しています。趣味はキャンプと登山です。

おすすめコンテンツ

いまならレッスン期間が2週間延長!この秋、プログラミングを学ぼう

転職成功で受講料0円!あなたもプログラミングを学んでエンジニアデビュー