为什么 PythonShell.run 使用两个参数并使用 .then(),而不能使用三个参数(回调函数作为第三个参数)?

Why does PythonShell.run work with two arguments and using a .then() while doesn't with three arguments (callback function as third)?

提问人:Ronald Becerra 提问时间:7/4/2023 最后编辑:Ronald Becerra 更新时间:7/4/2023 访问量:42

问:

我在 Node.js 中运行了这个脚本,它工作正常:

const {PythonShell} = require("python-shell");

PythonShell.run("hello.py", null).then(result => {
    try{
        console.log(result[0]);
    }
    catch(err){
        console.log("err = ", err);
    }
});

Python 中的脚本 “hello.py” 只有指令 “print('Hello from Python')”,因此在运行此 Node.js 脚本时,输出为 'Hello from Python'。

但是,如果我稍微修改一下它以不使用 .then(...) 而是使用回调函数,那么我没有得到任何输出,这是因为它从未进入回调函数,因为我已经证实了在开头放置了“console.log”:

const {PythonShell} = require("python-shell");

PythonShell.run("hello.py", null, function (err, result) {
    if (err) throw err;
    console.log(result[0]);
});

我尝试在第二个参数中放置一个选项对象,该参数具有“hello.py”文件的绝对路径,但它仍然不起作用。

我错过了什么?

python-shell 的版本为 5.0.0。

Python 节点.js promise 回调

评论


答:

1赞 spikehd 7/4/2023 #1

不能将回调与 一起使用。PythonShell.run()

看一下 run 函数的源代码,它只需要两个参数。这意味着您的第三个参数(回调函数)永远不会出现,因为该函数不是为了接受一个参数而编写的。

您应该使用的原因是因为返回一个 Promise.then()PythonShell.run()

评论

0赞 Ronald Becerra 7/4/2023
有没有可能随着版本而改变?我看过一些例子,他们将其与第三个参数一起使用:github.com/extrabacon/python-shell/issues/22
1赞 spikehd 7/4/2023
鉴于您链接的问题是 8 年前的,是的,我想从那时起😄它就发生了变化