今天看了一篇文章觉得很有趣,没想到 NodeJS 也能调用 Python,众所周知,Python 语言这几年红的不得了,在结合当今流行的 Javascript ,强强联合,给了我们更多想象空间,在一些场景下,可以进行一些尝试。废话不多说,我们来看看两者是怎么结合进行互相调用。
NodeJS 作为后端,仅在需要时调用 Python在某些特殊的场景下,比如复杂耗时的数据处理和运算时,我们可以用 Python 脚本编写,然后使用 Node 的子进程调用 Python 脚本即可,这样可以提升效率。如下代码,我们可以使用 Node.js 的 API child_process.spawn(command[, args][, options]) 进行调用 Python 脚本:
const spawn = require('child_process').spawn
app.get("process_data", (req, res) => {
spawn('python3', ['script.py'])
})
Python 脚本:
# script.py doSometing()
如果我们的 Node 脚本向 Python 脚本传递参数,那该怎么传呢,如下段代码所示:
const spawn = require('child_process').spawn
app.get("process_data", (req, res) => {
const msg = "Hello"
spawn('python3', ['script.py', msg])
})
这时我们需要改下 Python 的脚本,接收 NodeJS 传过的参数。如下段代码所示:
import sys, json def main(): msg = sys.argv[1] doSometing(msg) if __name__ == '__main__': main()
如果传输 JSON 这样复杂的数据,我们需要改写 Node 的写法,以数据流的形式传递给 Python ,示例代码如下:
const spawn = require('child_process').spawn,
const py = spawn('python3', ['script.py'])
const data = {
msg: "Hello"
}
py.stdin.write(JSON.stringify(data))
//we have to send data as a string, so we are using JSON.stringify
py.stdin.end()
接下来我们来改下 Python 脚本,接收 Node 前端传送的数据流,进行下一步的逻辑处理
import sys, json def main(): lines = sys.stdin.readlines() data = json.loads(lines) doSometing(data['msg']) if __name__ == '__main__': main()
Node 除了可以往 Python 传递数据,同时可以接收 Python 传递的数据,接下来我们来改写 Node 相关的脚本,示例代码如下:
const spawn = require('child_process').spawn
const py = spawn('python3', ['cscript.py'])
py.stdout.on('data', function(res){
let data = JSON.parse(res.toString())
console.log(data)
})
最后调整 Python 脚本,用于向 Node 前端传送数据,示例代码如下:
import sys # You will have your own implementation of get data. In this case lets assume it returns a dict/json res = getData() print(json.dumps(data)) sys.stdout.flush()
今天的文章就分享到这里,是不是很简单呢,感谢你的阅读,有了这些示例后,你可以尝试下在业务中进行运用,你会发现 Python + NodeJS 的强大之处,如果你有好的应用和想法,别忘记在留言区分享哟
参考来源:
作者:Shuvo
来源:https://dev.to/0shuvo0/copy-text-to-clipboard-in-jstwo-ways-1pn1



