2016-12-17 4 views
8

私はNodeJSのchild_processモジュールを使っていくつかのpythonスクリプトを実行するElectronプロジェクトを持っています。 私のpythonスクリプトは私のプロジェクトのルートフォルダにあります。 、Electronアプリでpythonスクリプトを実行

let py = spawn('python',['ResolvePosition.py', obsFilePath, navFilePath]) 
py.stdout.on('data', data => console.log('data : ', data.toString())) 
py.on('close',()=>{ 
    // Python ends, do stuff 
}) 

私はNPMモジュールelectron-builderを使用して、Windows用の実行ファイルを構築する場合npm start と私の電子のアプリを実行し、dist/win-unpacked/my-app.exeから実行可能ファイルを実行する場合、これは正常に動作します:ここで

は、私はPythonスクリプトを呼び出す方法ですこれは動作しません、それは私のスクリプトはpython ./my-script-pyでアクセスできないようです。

このコードをビルド済みプロジェクトで使用するにはどうすればよいですか?

答えて

8

私は私の問題を解決しました。私は同じ問題を抱える将来の読者について説明します。

電子ビルダーを使用すると、アプリケーションソースコードを電子ファイルにパッケージ化しないようにするオプションがあります。 これらのオプションは以下のとおりです。

ASAR

エレクトロンのアーカイブ形式を使用してアーカイブ、 にアプリケーションのソースコードをパッケージ化するかどうか。デフォルトはtrueです。ノードモジュールは、 を解凍する必要があります。自動的に検出されます。 明示的にasarUnpackを設定する必要はありません。

また、asarオプションのオブジェクトを渡すこともできます。 ASARアーカイブを作成するときに解凍するためにどの ファイルを指定するappディレクトリへの相対

asarUnpack

globパターン。 falseからasarの設定

DOCS

は、問題を解決し、それはelectron-builderによって推奨されていません。

フォルダに解凍するのに必要なすべてのファイルを含めて、 "asarUnpack" : "my-folder/*"を使用するのが正しい方法です。今すぐ開かれたすべてのファイルが利用可能です/resources/app.asar.unpacked/my-folder

もう1つのことは、パス'./ResolvePosition.py'を使用すると、自分のNodeJSファイルがあるパスではなく私の電子プロジェクトのルートフォルダを見ていることです。使用する:

let python = spawn('python', [path.join(__dirname, '../app.asar.unpacked/my-folder', 'ResolvePosition.py'), obsFilePath, navFilePath]) 
2

をあなたはextraResources内のスクリプト含めることができます。

"build": { 
    "extraResources": "python_scripts", 
... 

をそしてdirがアプリのルートになります。

let python = spawn('python', [path.join(app.getAppPath(), '..', 'python_scripts/my_script.py'])