gpt4 book ai didi

node.js - Node 子进程出现 python ENOENT 错误

转载 作者:太空宇宙 更新时间:2023-11-04 02:02:23 27 4
gpt4 key购买 nike

我正在尝试将 python 脚本作为 Node 脚本中的子进程进行调用。脚本的输出将在回调中使用。代码如下所示:

//myFunction.js

const myFunction = callback => {
let py = process.spawn('python', ['../folder/pyscript.py'], {
cwd: '../folder/'
});

let str = '';

py.stdout.on('data', data => {
str += data.toString();
}

py.stdout.on('end', () => {
callback(str);
}
}

exports.myFunction = myFunction;

当我直接运行 Node myFunction.js(在脚本中使用 myFunction 的实例)时,此代码可以按预期工作,并且当我需要与 myFunction.js 位于同一目录中的任何其他文件中的模块时,它可以正常工作。

但是当在不同的更高级别目录中需要该模块时,它会失败并出现以下错误:

error: spawn python ENOENT

我猜这与路径有关(也许是 cwd 的值?),但我似乎无法解决这个问题。我查过类似的问题,但答案没有帮助。

任何帮助将不胜感激。 :)

最佳答案

显然,问题出在 cwd 上。脚本中的所有内容都相对于调用脚本的目录路径。因此,基本上,从项目根目录运行 node myFunction.js (例如 ~/projects/myProject 会将 cwd 设置为 ~/projects/myProject/../folder ,其计算结果为 ~/projects/folder。这显然是不正确的,因为系统上很可能不存在名为 folder 的目录,因此这将导致 ENOENT > 错误。

解决方案是在代码中构造脚本的绝对路径,也许可以使用 __dirname__ 属性结合 path 模块提供的功能。

关于node.js - Node 子进程出现 python ENOENT 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45528547/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com