如何将 node.js 应用程序与 python 脚本连接?

问题描述 投票:0回答:2

我有 Meteor.js 中的节点应用程序和使用 Pafy 的短 python 脚本。

import pafy

url = "https://www.youtube.com/watch?v=AVQpGI6Tq0o"
video = pafy.new(url)

allstreams = video.allstreams
for s in allstreams:
	print(s.mediatype, s.extension, s.quality, s.get_filesize(), s.url)

连接它们的最有效方法是什么,以便 python 脚本从 node.js 应用程序获取 url 并将输出返回到 node.js?用 Python 而不是 Meteor.js 编写所有代码会更好吗?

javascript python node.js meteor pafy
2个回答
4
投票

好吧,有很多方法可以做到这一点,这取决于您的要求。 一些选项可能是:

  1. 只需使用 stdin/stdout 和一个子进程。在这种情况下,您只需要让您的 Python 脚本从 stdin 读取 URL,并将结果输出到 stdout,然后从 Node 执行脚本,可能使用 child_process.spawn。这是我认为最简单的方法。
  2. 将 Python 部分作为服务器运行,比方说 HTTP,尽管它可以是任何东西,只要您可以发送请求并获得响应。当你需要来自 Node 的数据时,你只需向你的 Python 服务器发送一个 HTTP 请求,它会在响应中返回你需要的数据。

在这两种情况下,您都应该以易于解析的格式返回数据,否则您将不得不编写额外的(无用的)逻辑来获取数据。将 JSON 用于此类事情非常普遍且非常容易。 例如,要让您的程序读取 stdin 并将 JSON 写入 stdout,您可以按以下方式更改脚本(

input()
适用于 Python 3,如果您使用的是 Python 2,请使用
raw_input()

import pafy
import json

url = input()
video = pafy.new(url)

data = []

allstreams = video.allstreams
for s in allstreams:
    data.append({
        'mediatype': s.mediatype,
        'extension': s.extension,
        'quality': s.quality,
        'filesize': s.get_filesize(),
        'url': s.url
    })

result = json.dumps(data)
print(result)

这里是 NodeJS 中使用 Python 脚本的一个非常简短的示例

var spawn = require('child_process').spawn;

var child = spawn('python', ['my_script.py']);

child.stdout.on('data', function (data) {
    var parsedData = JSON.parse(data.toString());
    console.log(parsedData);
});

child.on('close', function (code) {
    if (code !== 0) {
        console.log('an error has occurred');
    }
});

child.stdin.write('https://www.youtube.com/watch?v=AVQpGI6Tq0o');
child.stdin.end();

0
投票

如果您创建窗口,那么您将在侧窗外使用此代码段。

var child = spawn('python', ['my_script.py']);
© www.soinside.com 2019 - 2024. All rights reserved.