在 Windows 中生成 python ENOENT node.js

Posted

技术标签:

【中文标题】在 Windows 中生成 python ENOENT node.js【英文标题】:spawn python ENOENT node.js in windows 【发布时间】:2019-07-28 17:30:03 【问题描述】:

我为我的兄弟创建了一些代码,希望使用他的 node.js 后端的 python 函数。在我的 ubuntu 计算机上运行它时,它可以工作 - 但是!在他的 windows 机器上运行代码时,它会给出这个堆栈跟踪。

events.js:174
      throw er; // Unhandled 'error' event
      ^

Error: spawn python ENOENT
    at Process.ChildProcess._handle.onexit (internal/child_process.js:240:19)
    at onErrorNT (internal/child_process.js:415:16)
    at process._tickCallback (internal/process/next_tick.js:63:19)
    at Function.Module.runMain (internal/modules/cjs/loader.js:757:11)
    at startup (internal/bootstrap/node.js:283:19)
    at bootstrapNodeJSCore (internal/bootstrap/node.js:622:3)
Emitted 'error' event at:
    at Process.ChildProcess._handle.onexit (internal/child_process.js:246:12)
    at onErrorNT (internal/child_process.js:415:16)
    [... lines matching original stack trace ...]
    at bootstrapNodeJSCore (internal/bootstrap/node.js:622:3)

这是 node.js 文件

const spawn = require("child_process").spawn;
const pythonProcess = exec('python',["./script.py", 2, 4]);

pythonProcess.stdout.on('data', function(data) 
    console.log(data.toString('utf-8'))
 )

这是 script.py 文件

import sys

print("work with me please")
sys.stdout.flush()

有很多人有这样的问题,但是所有的答案似乎都对特定的人来说过于具体了。一些提到路径变量,一些 npm.cmd 和其他的第三个。

我应该如何解决这种特殊情况?


编辑:

我尝试过 npm init、npm install、围绕移动代码谷歌搜索和更改 cmd 和目录范围等进行资助。

【问题讨论】:

您是否确认在 Windows 机器上从命令行调用 python ./script.py 时有效? @Chase 是的先生! 这是一个很容易掉入的黑洞,但另一个需要检查的明显事情是,Windows 机器上的 Node 代码只是简单地复制并运行,还是使用 @987654325 安装的新版本的 node_modules @?跨操作系统和跨架构通常意味着某些模块需要在安装时针对它们所在的系统进行编译。 @Chase 我应该将它添加到帖子中。是的,我们安装了 npm init,删除了重新放入的代码块,并且在决定发布这个问题之前,这种摆弄了几个小时。所以不,如果是这样的话! @Chase,我错了。我们回去重新安装了python,它工作了。你是风云人物! 【参考方案1】:

嘿,我遇到了类似的问题,这成功了,当我添加 pythonPath: 'python' 时它已修复:

const  PythonShell  = require('python-shell');

let options = 
    mode: 'text',
    pythonPath: 'python',
    pythonOptions: ['-u'], // get print results in real-time
    scriptPath: 'path',
    args: ['arg1', 'arg2']
;

PythonShell.run('scraper.py', options, function(err, results) 
    if (err) console.log(err);
    // results is an array consisting of messages collected during execution
    console.log('results: %j', results);
);

【讨论】:

谁能解释一下这种变化是如何工作的?【参考方案2】:

我有类似的错误:

events.js:292 投掷者; // 未处理的“错误”事件 ^

错误:生成 python ENOENT 在 Process.ChildProcess._handle.onexit (internal/child_process.js:267:19) 在 onErrorNT (internal/child_process.js:469:16) 在 processTicksAndRejections (internal/process/task_queues.js:84:21) 在 ChildProcess 实例上发出“错误”事件: 在 Process.ChildProcess._handle.onexit (internal/child_process.js:273:12) 在 onErrorNT (internal/child_process.js:469:16) 在 processTicksAndRejections (internal/process/task_queues.js:84:21) 错误号:'ENOENT', 代码:'ENOENT', 系统调用:'spawn python', 路径:'蟒蛇', 生成参数:[ '/home/NodeJsRunPython/script2.py' ]

此脚本改编自https://medium.com/swlh/run-python-script-from-node-js-and-send-data-to-browser-15677fcf199f

我在'python3'上更改'python'

const python = spawn('python3', [__dirname +'/script2.py']);

对我来说它有效:

const express = require('express')
const spawn = require('child_process');
const app = express()
const port = 3000

app.get('/', (req, res) => 
 
 var dataToSend;
 // spawn new child process to call the python script
 const python = spawn('python', [__dirname +'/script2.py']);
 // collect data from script
  python.stdout.on('data', function (data) 
  console.log('Pipe data from python script ...');
  dataToSend = data.toString();
 );
 // in close event we are sure that stream from child process is closed
 python.on('close', (code) => 
 console.log(`child process close all stdio with code $code`);
 // send data to browser
 res.send(dataToSend)
 );
 
)
app.listen(port, () => console.log(`Example app listening on port 
$port!`))

【讨论】:

以上是关于在 Windows 中生成 python ENOENT node.js的主要内容,如果未能解决你的问题,请参考以下文章

Python sphinx-build在Windows系统中生成Html文档

如何通过Python删除Windows中的(g)zip文件? (在LabVIEW中生成的文件。)

在 Python 中生成音调而不冻结线程?

在 windows 中生成声音频率 - VB.Net

在 Windows 8 中生成地图应用程序的 URL [关闭]

R语言使用edit函数在Rsudio中生成数据编辑器(在windows中生成编辑器)在编辑器中输出需要的数据生成最终的dataframe