PythonBridge:如何正确设置子进程的当前工作目录



我有一个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')

我不确定这是一个正常的过程还是一些肮脏的黑客,但它适用于我的项目。

相关内容

最新更新