当Python Shell无法运行时,请尝试以下方法

我打算使用Node.js来进行Web爬虫,想到如果能与Python进行集成可能会简单一些。然后我得知了一个名为python-shell的Node.js环境中可以执行Python代码的库,于是我尝试了一下,但是不像我期望的那样运行。我想分享一下我尝试解决这个问题所做的事情。

环境

苹果笔记本电脑Air
苹果M2芯片
nodejs版本:v16.15.0
python版本:Python 3.11.2
python-shell版本:5.0.0

解决的过程

当你搜索Python-shell的用法时,一些排名较高的网站上会提供相关内容。

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

// runStringメソッド
PythonShell.runString('print("Hello world")', null, function (err, result) {
    if (err) throw err;
 
    console.log(result);
});

// runメソッド(pythonファイルを指定して実行させる)
PythonShell.runString('test.py', null, function (err, result) {
    if (err) throw err;
 
    console.log(result);
});

在runString方法或run方法的第三参数中提供回调函数来处理错误和console.log等,但即使执行了这些操作,也没有发现Python在运行的迹象。

我想在runString方法中, python的输出应该被存储在result中并且被用console.log打印出来,但是似乎还没有被输出。
我在错误处理阶段卡住了吗?

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

console.log('run1');
PythonShell.runString('print("Hello world")', null, function (err, result) {
    if (err) throw err;

    console.log(result);
});
console.log('run2');
/** 結果
 *  run1
 *  run2
 *  /

尝试通过console.log插入,但确实也输出了run2(可能不是很好的方法…)

我认为在语句末尾使用像axios一样的then子句会怎么样,请执行以下操作。

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

PythonShell.runString('print("Hello world")', null)
  .then((response) => {
    console.log(response);
  })
  .catch((error) => {
    console.log(error);
});
// 結果 [ 'Hello world' ]

回调的调用方式改变了吗?

 

↑或者更准确地说,这是在官方文件中写明的。

總結

不容易理解的,有人解释的也可以,但最好去看官方文件。

最后

我写这篇文章是为了那些刚开始编程的人,他们常常使用Python,所以希望能对遇到类似问题的人有所帮助。
虽然英语可能有些难懂,但是代码是一种共同语言,所以我自己也从中得到了一个教训,那就是官方提供的文档通常是最有参考价值的。

bannerAds