当前位置: 首页 > 面试题库 >

使用节点child_process的标准输出缓冲区问题

裴嘉许
2023-03-14
问题内容

我正在尝试使用节点child_process执行curl从本地网络中的共享文件夹中获取JSON文件(约220Ko)。但是它实际上返回了一个我无法解决的缓冲区问题。这是我的代码:

var exec = require('child_process').exec;

var execute = function(command, callback){
    exec(command, function(error, stdout, stderr){ callback(error, stdout); });
};

execute("curl http://" + ip + "/file.json", function(err, json, outerr) {
    if(err) throw err;
    console.log(json);
})

这是我得到的错误:

if(err) throw err;
          ^
Error: stdout maxBuffer exceeded.
    at Socket.<anonymous> (child_process.js:678:13)
    at Socket.EventEmitter.emit (events.js:95:17)
    at Socket.<anonymous> (_stream_readable.js:746:14)
    at Socket.EventEmitter.emit (events.js:92:17)
    at emitReadable_ (_stream_readable.js:408:10)
    at emitReadable (_stream_readable.js:404:5)
    at readableAddChunk (_stream_readable.js:165:9)
    at Socket.Readable.push (_stream_readable.js:127:10)
    at Pipe.onread (net.js:526:21)

问题答案:

使用时,您需要使用并设置maxBuffer选项child_process.exec。从文档中:

maxBuffer 指定在stdout或stderr上允许的最大数据量-如果超出此值,则终止子进程。

该文档还指出默认值为maxBuffer200KB。

例如,以下代码将最大缓冲区大小增加到500KB:

var execute = function(command, callback){
    exec(command, {maxBuffer: 1024 * 500}, function(error, stdout, stderr){ callback(error, stdout); });
};

此外,您可能想阅读一下http.get,看看它是否能够实现您要尝试执行的操作。



 类似资料:
  • 问题内容: 我的测试应用程序是 我想在每个输入字符后看到字符代码。但实际上* s仅在控制台中的’\ n’之后打印。因此,似乎缓冲了stdin(文件的desc 0)。但是读取功能没有缓冲区,不是吗?我哪里错了。 UPD:我使用linux。 所以解决方案是 问题答案: 不幸的是,标准ANSI C无法实现您要查找的行为,并且UNIX终端I / O的默认模式是面向行的,这意味着您将始终需要输入的字符来检索

  • 问题内容: 默认情况下,Python的解释器是否启用输出缓冲? 如果答案是肯定的,那么有什么方法可以禁用它? 到目前为止的建议: 使用命令行开关 包装每次写入后刷新的对象 设置环境变量 还有其他方法可以在执行过程中以编程方式在中设置一些全局标志吗? 问题答案: 你可以使用”python -u”()或通过设置环境变量PYTHONUNBUFFERED来跳过整个python进程的缓冲。 你还可以将替换为

  • 我有一个使用paramiko的缓冲区的问题,我在这里发现了同样的问题,其中一个解决方案指出: 如果您只是调用.open()来获取SFTPFile实例,而不是使用.get(),那么就对该对象调用.read(),或者只是将其交给Python标准库函数shutil.copyFileObj()来下载内容。这将避免Paramiko预取缓存,并且允许您下载文件,即使它没有那么快。 如果我有:

  • 问题内容: 我从源接收数据,该数据本来是二进制格式的(是)。我必须将此数据转换回。我很难弄清楚该怎么做。 这是一个显示我的问题的小样本: 版画 在这里,我想与完全相同。 如何将字符串转换为其原始二进制文件? 问题答案: 由于utf8的工作方式(尤其是当无效的utf8字符替换为时),您不能期望转换为utf8并再次返回的二进制数据与原始二进制数据相同。 您必须使用另一种可以正确保留数据的格式。这可以是

  • 我正在尝试向arduino的串行监视器发送一些数据,并使led亮起,但我还无法获取它。我的代码中有什么问题请检查这里是arduino代码 下面是java代码

  • 缓冲区溢出的漏洞随着冯·诺依曼 1 构架的出 现就已经开始出现了。 在1988年随着莫里斯互联网蠕虫的广泛传播他们开始声名狼藉。不幸的是, 同样的这种攻击一直持续到今天。 到目前为止,大部分的缓冲区溢出的攻击都是基于摧毁栈的方式。 大部分现代计算机系统使用栈来给进程传递参数并且存储局部变量。 栈是一种在进程映象内存的高地址内的后进先出(LIFO)的缓冲区。 当程序调用一个函数时一个新的“栈帧”会被