我有一个Node.js项目,它必须与以前编写的Python脚本集成。目前Node.js项目的部署方式是Python脚本必须放在Node根目录中。在这些条件下,整个项目运行良好,没有任何错误警告。出于某些原因,我想将Python脚本放在Node根目录之外。因此,我添加了.cwd参数:
const python = pythonBridge({
python: 'python3',
stdio: ['pipe', 'pipe', 'pipe'],
cwd: '/dir1/dir2/' # added line
})
现在,当Python脚本位于/dir1/dir2/文件夹中时,会生成一条错误消息:
ERROR: (node:14870) UnhandledPromiseRejectionWarning: ReferenceError: logger is not defined
at /NodeJSrootFolder/dist/NodeJSFactory.js:69:7
作为Node.js的新手,我想知道除了.cwd之外,为了使项目正确运行,还必须更改哪些参数?
根据此处发布的说明(https://www.npmjs.com/package/python-bridge),必须通过.cwd选项指定子进程的当前工作目录:
var python = pythonBridge(options)
options.cwd - String Current working directory of the child process
正如我在问题中提到的,这个解决方案不起作用。实际上,.js文件忽略了.cwd选项,并在Node.js根目录中查找Python脚本。为了解决这个问题,必须在FS对象内部指定完整地址:
const fs = require('fs').promises
// ...
// somewhere below
// ...
let reads = [
fs.readFile('/dir1/dir2/myPythonScript.py'),] // vs. fs.readFile('./myPythonScript.py')
我不确定这是一个正常的过程还是一些肮脏的黑客,但它适用于我的项目。