2017-04-19 10 views
1

クロムネイティブメッセージングを使用して、youtube-dlと通信するための拡張機能を、node.jsホストスクリプトを使用して作成しようとしています。 &でも子プロセス(つまりtouch file.dat)を実行できましたが、exec/spawnしようとすると、コマンドでハングします。youtube-dl私はクロムネイティブの入力とは独立してホストスクリプトを試しました。私はこの問題は、クロムネイティブメッセージのバッファサイズに1MBの制限が関係していると考えています。バッファを読み込む方法はありますか?クロムネイティブメッセージング - 子プロセスを掛ける

#! /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

答えて

1

で見つけることができます。ホストからクロムへのメッセージでは1 MBの制限が伴いました。これを避けるには、stdout/stderrをファイルにリダイレクトします。

const cmd = `youtube-dl --extract-audio --audio-format mp3 -o \"${outTemplate}\" ${url} &> d.txt`; 

これは私に役立ちました。正直言って、なぜメッセージが1 MB以上と見なされているのではないのか、誰かがより良い説明を与えることができれば偉大になるでしょう。