我使用Pafy在Meteor.js和短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 app获取url并将输出返回给node.js?用Python而不是Meteor.js编写所有代码会更好吗?
答案 0 :(得分:1)
嗯,有很多方法可以做到这一点,这取决于你的要求。 一些选项可能是:
在这两种情况下,您都应该以可以轻松解析的格式返回数据,否则您将不得不编写额外的(和无用的)逻辑来获取数据。使用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)
这是使用Python脚本
的NodeJS中的一个非常简短的示例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();