gpt4 book ai didi

node.js - Chrome native 消息传递 - 挂起子进程

转载 作者:太空宇宙 更新时间:2023-11-04 00:24:07 24 4
gpt4 key购买 nike

我正在尝试制作一个扩展程序,该扩展程序使用 Chrome 原生消息传递功能,通过 Node.js 主机脚本与 youtube-dl 进行通信。我已经能够成功解析扩展中的标准输入,并且还能够运行子进程(即 touch file.dat),但是当我尝试 exec/spawn youtube- dl 它卡在命令上。我已经尝试过独立于 Chrome native 输入的主机脚本,并且它工作正常。我认为这个问题可能与 chrome native 消息传递缓冲区大小的 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 找到

最佳答案

所以我对导致问题的原因是正确的。这与主机到 chrome 消息的 1 MB 限制有关。您可以通过将 stdout/stderr 重定向到文件来避免这种情况。

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

这对我有用。老实说,我并不完全明白为什么该消息被认为> 1 MB,如果有人能给出更好的解释那就太好了。

关于node.js - Chrome native 消息传递 - 挂起子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43502445/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com