Python+JavaScript = 真牛

91 篇文章 4 订阅

程序员宝藏库https://github.com/Jackpopc/CS-Books-Store

谁才是最好的编程语言?

Java、PHP、Python、Go、JavaScript....

img

每个人都有自己的答案,但是,当范围限定在Web开发,没有什么能胜过JavaScript。

但有时我们必须做一些要求更高的任务,例如,分析大量的数据。

在这种情况下,Python可能是一个更好的选择。

但这只是我们网站的一个功能,自然不会因为这一点需求而用Python开发整个工程。

今天,就来给大家介绍一种能够将JavaScript和Python完美结合在一起,高效解决工程问题的方法。

JavaScript+Python

这对于很多开发同学来说,绝对算得上一个很吸引人的消息。

我们可以在Node.JS中使用子进程,在需要时运行一个Python脚本。

const spawn = require('child_process').spawn
app.get("process_data", (req, res) => {
    spawn('python3', ['script.py'])
})

再来写一个Python脚本:

# script.py
doSometing()

除了这种方式,我们也可以将数据传递给我们的Python脚本。

const spawn = require('child_process').spawn
app.get("process_data", (req, res) => {
    const msg = "Hello"
    spawn('python3', ['script.py', msg])
})

在Python中,为了能够读取数据,你必须导入sys模块。

import sys, json
​
def main():
    msg = sys.argv[1]
    doSometing(msg)
​
if __name__ == '__main__':
    main()

现在,我们不需要在生成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脚本:

import sys, json
​
def main():
    lines = sys.stdin.readlines()
    data = json.loads(lines)
    doSometing(data['msg'])
​
if __name__ == '__main__':
    main()

最后,我们可以从Python脚本中向nodejs发送响应。

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代码为:

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()

这样,我们就可以在Web开发过程中,能够同时兼顾JavaScript、Python的优势,最大化发挥不同编程语言的价值。无需借助数据库,或者开发繁琐的api结构就可以有机的把JavaScript与Python结合到一起,提升开发效率。

大家好,我是Jackpop!我花费了半个月的时间把这几年来收集的各种技术干货整理到一起,其中内容包括但不限于Python、机器学习、深度学习、计算机视觉、推荐系统、Linux、工程化、Java,内容多达5T+,获取方式:技术干货_免费高速下载|百度网盘-分享无限制(提取码:0000)

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值