Ну, есть много способов сделать это, это зависит от ваших требований. Возможные варианты:
- Просто используйте stdin/stdout и дочерний процесс. В этом случае вам просто нужно, чтобы ваш скрипт Python считывал URL-адрес из stdin и выводил результат на stdout, а затем выполнял сценарий из узла, возможно, используя child_process.spawn. Это, я думаю, самый простой способ.
- Запустите часть Python как сервер, допустим, HTTP, хотя это может быть что угодно, если вы можете отправить запрос и получить ответ. Когда вам нужны данные из узла, вы просто отправляете HTTP-запрос на свой сервер Python, который вернет вам данные, которые вам нужны в ответе.
В обоих случаях вы должны вернуть данные в формате, который может быть легко проанализирован, иначе вам придется писать дополнительную (и бесполезную) логику только для того, чтобы вернуть данные. Использование JSON для таких вещей довольно распространено и очень легко. Например, чтобы ваши чтения программа стандартного ввода и записи в формате JSON на стандартный вывод, вы можете изменить свой сценарий следующим образом (input()
для Python 3, используйте raw_input()
, если вы используете Python 2)
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();
похоже, [ 'ytdl.getInfo()'] (https://github.com/fent/node-ytdl-core#ytdlgetinfourl-options-callbackerr -info) может извлечь большую часть необходимой информации из чистого JS-модуля. – robertklep