【问题标题】:PythonBridge: how to correctly set up current working directory of the child process?PythonBridge:如何正确设置子进程的当前工作目录?
【发布时间】:2020-07-23 12:40:05
【问题描述】:

我有一个 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 之外必须更改哪些参数才能使项目正确运行?

【问题讨论】:

    标签: node.js python-3.x linux npm


    【解决方案1】:

    根据此处发布的说明 (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')
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-14
      • 1970-01-01
      • 2010-12-21
      • 1970-01-01
      • 2016-01-06
      • 1970-01-01
      • 2011-01-23
      • 1970-01-01
      相关资源
      最近更新 更多