使用节点子进程生成python enoint错误
我试图将python脚本作为节点脚本中的子进程调用。脚本的输出将在回调中使用。代码如下所示:使用节点子进程生成python enoint错误,python,node.js,child-process,Python,Node.js,Child Process,我试图将python脚本作为节点脚本中的子进程调用。脚本的输出将在回调中使用。代码如下所示: //myFunction.js const myFunction = callback => { let py = process.spawn('python', ['../folder/pyscript.py'], { cwd: '../folder/' }); let str = ''; py.stdout.on('data', data => {
//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。脚本中的所有内容都与调用脚本的目录的路径相关。基本上,从项目根目录运行
节点myFunction.js
(假设~/projects/myProject
会将cwd设置为~/projects/myProject//文件夹
,这将计算为~/projects/folder
。这显然是不正确的,因为在所有情况下,系统上都不存在名为文件夹
的目录,因此这将导致eNot
错误
解决方案是在代码中构造脚本的绝对路径,可能是通过使用
\uuu dirname\uuu
属性以及path
模块提供的功能来实现。显然,问题在于cwd。脚本中的所有内容都与sc所在目录的路径相关因此,基本上,从项目根目录运行节点myFunction.js
(假设~/projects/myProject
会将cwd设置为~/projects/myProject//文件夹
,这将计算为~/projects/folder
。这显然是不正确的,因为在所有情况下,系统上都不存在名为文件夹
的目录,因此这将导致eNot
错误
解决方案是在代码中构造脚本的绝对路径,可能是通过使用
\uuu dirname\uuu
属性和路径
模块提供的功能结合使用。在意识到我的脚本文件没有被nodeJS提取和生成之前,我已经为这个问题挣扎了好几天,因为一些文件路径
问题
虽然我不能保证这对每个人都有效,但这取决于他们的设置,这是我在nodejs文件中所做的:
let py = process.spawn('python', [__dirname + '../folder/pyscript.py']);
如您所见,我不必使用{cwd:'../folder/'}
选项
如果脚本作为javascript文件位于当前目录中,只需执行以下操作
let py = process.spawn('python', [__dirname + './pyscript.py']);
我还要指出:
spawn('python',['./pyscript.py'])
我从来没有为我工作过,我花了好几天时间想知道为什么。在我尝试这种技术之前,我一直在寻找答案。希望有这个问题的人觉得这个答案有用。我为这个问题挣扎了好几天,才意识到我的脚本文件没有被nodeJS提取和生成,因为一些
文件路径
问题
虽然我不能保证这对每个人都有效,但这取决于他们的设置,这是我在nodejs文件中所做的:
let py = process.spawn('python', [__dirname + '../folder/pyscript.py']);
如您所见,我不必使用{cwd:'../folder/'}
选项
如果脚本作为javascript文件位于当前目录中,只需执行以下操作
let py = process.spawn('python', [__dirname + './pyscript.py']);
我还要指出:
spawn('python',['./pyscript.py'])
从来没有为我工作过,我花了好几天时间想知道为什么。在我尝试这种技术之前,我可以找到一个答案。希望有这个问题的人觉得这个答案有用。使用${process.cwd()}对我有用…你可以这样写
let py = process.spawn('python', [`${process.cwd()}/folder/pyscript.py`]});
使用${process.cwd()}对我很有效……您可以这样编写它
let py = process.spawn('python', [`${process.cwd()}/folder/pyscript.py`]});
。/folder/pyscript.py
是一个相对路径,当然它取决于正确的cwd。您尝试过绝对路径吗?我想我在问这个问题时错过了您的评论,但您可能是正确的。我将为我自己的问题添加一个答案,以帮助将来的提问者。谢谢!)。/folder/pyscript.py
是一个相对路径,当然它取决于正确的cwd。你尝试过绝对路径吗?我想我问这个问题时错过了你的评论,但你可能是对的。我会为我自己的问题添加一个答案,以帮助任何未来的提问者。谢谢!:)那很有帮助…谢谢那很有帮助…谢谢