当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,所以希望能对遇到类似问题的人有所帮助。
虽然英语可能有些难懂,但是代码是一种共同语言,所以我自己也从中得到了一个教训,那就是官方提供的文档通常是最有参考价值的。