Dentro de una aplicación electron.js, intento llamar y ejecutar un script de python desde node.js según estas indicaciones: https://nodejs.org/api/child_process.html#child_process_child_process_execfile_file_args_options_callback
import { execFile } from 'child_process'; let pythonPath = '/home/marco/anaconda3/bin/python3'; execFile('./scripts/factorial.py', [parseInt(msg)], { cwd: './scripts', env: '/home/marco/anaconda3/bin/python3' }, (error, stdout, stderr) => { if (error) { throw error; } console.log(stdout); } );Y me sale este error:
Al comentar la parte de options :
execFile('./scripts/factorial.py', [parseInt(msg)], //{ cwd: './scripts', //env: '/home/marco/anaconda3/bin/python3' //}, (error, stdout, stderr) => { if (error) { throw error; } console.log(stdout); } );Me sale el mismo error.
Siguiendo las indicaciones que se encuentran aquí: https://www.tutorialspoint.com/run-python-script-from-node-js-using-child-process-spawn-method modifiqué el código de la siguiente manera:
const { spawn } = require('child_process'); let nb = parseInt(msg); function runScript() { return spawn ('python3', [ "-u", path.join(__dirname, './scripts/factorial.py'), nb, ]); } const subprocess = runScript(); subprocess.stdout.on('data', (data) => { console.log(`data:${data}`); }); subprocess.stderr.on('data', (data) => { console.log(`error:${data}`); }); subprocess.stderr.on('close', () => { console.log("Closed"); });me sale este error:
error:python3: can't open file '/home/marco/webMatters/electronMatters /PythonConnection/.webpack/main/scripts/factorial.py': [Errno 2] No such file or directory ClosedSiguiendo las indicaciones que se encuentran aquí: https://webpack.js.org/plugins/copy-webpack-plugin/#root modifiqué /tools/webpack/webpack.plugins.js como:
const CopyPlugin = require("copy-webpack-plugin"); module.exports = [ new ForkTsCheckerWebpackPlugin(), new webpack.ExternalsPlugin('commonjs', [ 'electron' ]), new CopyPlugin({ patterns: [ { from: "src/scripts/", to: ".webpack/main/script/" }, ], }), ];A mí me parece que respeta el estándar, pero me sale este largo mensaje de error:
An unhandled error has occurred inside Forge: compilation.getCache is not a function TypeError: compilation.getCache is not a function at /home/marco/webMatters/electronMatters/PythonConnection /node_modules/copy-webpack-plugin/dist/index.js:459:33 at SyncHook.eval (eval at create (/home/marco/webMatters /electronMatters/PythonConnection/node_modules/tapable /lib/HookCodeFactory.js:19:10), <anonymous>:7:1) at SyncHook.lazyCompileHook (/home/marco/webMatters/electronMatters /PythonConnection/node_modules/tapable/lib/Hook.js:154:20) at Compiler.newCompilation (/home/marco/webMatters/electronMatters /PythonConnection/node_modules/webpack/lib/Compiler.js:630:30) at /home/marco/webMatters/electronMatters/PythonConnection /node_modules/webpack/lib/Compiler.js:667:29 at AsyncSeriesHook.eval [as callAsync] (eval at create (/home/marco /webMatters/electronMatters/PythonConnection/node_modules/tapable /lib/HookCodeFactory.js:33:10), <anonymous>:6:1) at AsyncSeriesHook.lazyCompileHook (/home/marco/webMatters /electronMatters/PythonConnection/node_modules/tapable /lib/Hook.js:154:20) at Compiler.compile (/home/marco/webMatters/electronMatters /PythonConnection/node_modules/webpack/lib/Compiler.js:662:28) at /home/marco/webMatters/electronMatters/PythonConnection /node_modules/webpack/lib/Watching.js:77:18 at AsyncSeriesHook.eval [as callAsync] (eval at create (/home/marco /webMatters/electronMatters/PythonConnection/node_modules/tapable /lib/HookCodeFactory.js:33:10), <anonymous>:33:1) at AsyncSeriesHook.lazyCompileHook (/home/marco/webMatters /electronMatters/PythonConnection/node_modules/tapable /lib/Hook.js:154:20) at Watching._go (/home/marco/webMatters/electronMatters /PythonConnection/node_modules/webpack/lib/Watching.js:41:32) at /home/marco/webMatters/electronMatters/PythonConnection /node_modules/webpack/lib/Watching.js:33:9 at Compiler.readRecords (/home/marco/webMatters/electronMatters /PythonConnection/node_modules/webpack/lib/Compiler.js:529:11) at new Watching (/home/marco/webMatters/electronMatters /PythonConnection/node_modules/webpack/lib/Watching.js:30:17) at Compiler.watch (/home/marco/webMatters/electronMatters /PythonConnection/node_modules/webpack/lib/Compiler.js:244:10) error Command failed with exit code 1.Parece un paso más allá, pero aún hay algo que arreglar.
versión del nodo: v14.5.0 OS: Ubuntu 18.04 Desktop
¿Como resolver el problema? Esperando su amable ayuda
Parece que su problema es que está usando webpack <5 y copy-webpack-plugin 7 que no son compatibles.
Solo haz :
npm install copy-webpack-plugin@6 --save-devArreglarlo.