Chrome 기본 메시지를 사용하여 node.js 호스트 스크립트를 사용하여 youtube-dl
과 통신하는 확장 프로그램을 만들려고합니다. &도 하위 프로세스 (예 : touch file.dat
)를 실행할 수 있었지만 내게 exec/spawn을 시도 할 때 명령에서 응답하지 않는 확장 프로그램에서 stdin을 성공적으로 파싱했습니다. 내가 크롬 원시 입력 독립적으로 호스트 스크립트를 시도하고 잘 작동합니다. 문제는 크롬 네이티브 메시징의 버퍼 크기에 대한 1MB 제한과 관련이 있다고 생각합니다. 버퍼를 읽는 방법이 있습니까? Chrome 기본 메시지 - 행 아웃 하위 프로세스
#! /usr/bin/env node
"use strict";
const fs = require('fs');
const exec = require('child_process').execSync;
const dlPath = '/home/toughluck/Music';
let first = true;
let buffers = [];
process.stdin.on('readable',() => {
let chunk = process.stdin.read();
if (chunk !== null) {
if (first) {
chunk = chunk.slice(4);
first = false;
}
buffers.push(chunk);
}
});
process.stdin.on('end',() => {
const res = Buffer.concat(buffers);
const url = JSON.parse(res).url;
const outTemplate = `${dlPath}/%(title)s.%(ext)s`;
const cmdOptions = {
shell: '/bin/bash'
};
const cmd = `youtube-dl --extract-audio --audio-format mp3 -o \"${outTemplate}\" ${url}`;
// const args = ['--extract-audio', '--audio-format', 'mp3', '-o', outTemplate, url];
// const cmd2 = 'youtube-dl';
process.stderr.write('Suck it chrome');
process.stderr.write('stderr doesnt stop host');
exec(cmd, cmdOptions, (err, stdout, stderr) => {
if (err) throw err;
process.stderr.write(stdout);
process.stderr.write(stderr);
});
process.stderr.write('\n Okay....');
});
전체 코드베이스
는 그래서 문제의 원인이 있었는지에 대한 옳았다 https://github.com/wrleskovec/chrome-youtube-mp3-dl