NodeJS 如果我在父文件夹中运行,child_process spawn不起作用

f0brbegy  于 2023-06-29  发布在  Node.js
关注(0)|答案(1)|浏览(201)

所以我使用child_process spawn来从nodejs和python发送和接收数据。
这是我的代码

var py = spawn('python3', ['./python.py']),
var responseArray = []
py.stdin.write(JSON.stringify(sendData));
    py.stdin.end();
    py.stdout.on('data', function (data) {
        responseArray = JSON.parse(data.toString())
    });
    py.stdout.on('end', function () {
        console.log(responseArray)
    });

所以在代码中,我展示了如果我像这样直接运行 *node project.js *,我会收到python发送给nodeJs的数据,但是如果我像这样从父文件夹 *node folder/project.js * 运行,它会立即转到stdout,显示数据为空

mi7gmzs6

mi7gmzs61#

child_process.spawn默认使用与Node进程相同的当前工作目录(cwd):
使用cwd指定从中派生进程的工作目录。如果未指定,则默认为继承当前工作目录。
因此,如果您从父文件夹调用JS脚本,则CWD是该父文件夹,但python.py文件不在其中。
如链接文档中所述,您可以使用spawn的第三个参数来指定选项,特别是应该使用的cwd

spawn('python3', ['./python.py'], {
  cwd: './folder' // Or better: an absolute path
})

...或者简单地修复Python脚本的路径:

spawn('python3', ['./folder/python.py'])

相关问题