JavaScript上で他言語プログラムを実行する

2/27/2020 JavaScriptElectron

動機

卒研でとある解析プログラムを開発した.(CとPython) 後任のためにGUIで解析できるElectronデスクトップアプリを開発しようと決意.

ElectronどころかNodeアプリは初だった.Viewはまぁ良いとして解析のロジックをどう繋げようか悩んだ. 不得意なphpやjsに書き換えるのもアレなので,どうにかjs上でC,Pythonプログラムが実行できないかと思案したのが動機.

救える人

  • Nodeアプリ開発でjs上で他言語のプログラムを実行したい人

本編のネタバレすると,js上にサブプロセスを走らせる.ということをする. 要はコマンドプロンプトやらターミナルだ.なので,ターミナルで出来る作業はなんだって出来る.

これを言うと僕みたいな未熟者以外の方の耳もピクリと動くのではなかろうか.

本編

chile_processというNodeモジュールを使うと幸せになれる. このモジュールはjs上でサブプロセスを生成できるという代物.

僕が作ったelectronアプリが例を抜粋するとこんな感じ.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>subroutine</title>
    <script>
        function subroutine() {
		    let remote = require("electron").remote; // 以下3行はelectronアプリのpathを入手する例
            let app = remote.app;
            let path = app.getAppPath();

            const exec = require("child_process").exec;

            exec(path + "/violin_plot.bat"); // exec()の中にサブプロセスで実行したいコマンドをいれる.
    
	    }
    </script>
</head>
<body>
    <button onclick="subroutine();">サブルーチン</button>
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

実際にはターミナルは表示されないので,標準出力とかは確認できないが,解析からのファイル操作とかCやpythonが得意なことで使うと効力を発揮するだろう.

Last Updated: 4/11/2021, 1:24:08 PM