社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python + JavaScript = 真牛!

进击的Coder • 4 年前 • 613 次点击  
这是「进击的Coder」的第 527 篇技术分享
作者:7steps
来源:七步编程

“

阅读本文大概需要 5 分钟。


”


谁才是最好的编程语言?

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

每个人都有自己的答案,但是,当范围限定在 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 结合到一起,提升开发效率。

End

「进击的Coder」专属学习群已正式成立,搜索「CQCcqc4」添加崔庆才的个人微信或者扫描下方二维码拉您入群交流学习。


看完记得关注@进击的Coder
及时收看更多好文
↓↓↓


崔庆才的「进击的Coder」知识星球已正式成立,感兴趣的可以查看《我 创办了一个知识星球》了解更多内容,欢迎您的加入:





点个在看你最好看

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/124364