Tag: subprocess

如何在Node.js中逐行读取child_process?

我正在尝试做一个Node.js脚本来分析磁盘使用情况。 为此,我掏出了du ,但我无法弄清楚如何逐行读取subprocess的输出。 以下是我迄今为止所尝试的: var spawn = require("child_process").spawn, rl = require('readline'), du = spawn('du', ['/home']); linereader = rl.createInterface(du.stdout, du.stdin); // Read line by line. //du.stdout.on('data', function (data) { linereader.on('line', function (data) { console.log(data); }); du.stdout.on('data'只是读取数据块,而readline应该按行分割它的input,而不是,而是我得到完全相同的数据(du.stdout返回一个缓冲区,但调用.toString()它给了我与linereader相同的数据)。

将存储在内存中的string传递给pdftotext,antiword,catdoc等

是否有可能调用CLI工具,如pdftotext,antiword,catdoc(文本提取脚本)传递string而不是文件? 目前,我阅读PDF文件与child_process.spawn调用pdftotext。 我产生一个新的进程,并将结果存储在一个新的variables。 一切工作正常。 我想从fs.readFile而不是文件本身传递binary文件: fs.readFile('./my.pdf', (error, binary) => { // Call pdftotext with child_process.spawn passing the binary. let event = child_process.spawn('pdftotext', [ // Args here! ]); }); 我怎样才能做到这一点?

如何执行/中止JS中的长时间运行的任务?

具有Mongo DB的NodeJS服务器 – 一个function将从DB生成报告JSON文件,这可能需要一段时间(60秒以上 – 必须处理数十万条logging)。 我们希望将其作为后台任务运行。 我们需要能够启动一个报表生成过程,监视它,并在用户决定更改参数并重新构build时终止它。 节点最简单的方法是什么? 不要真的想进入单独的工作服务器处理工作,消息队列等领域 – 我们需要保持在同一个盒子和相当简单的实现。 1)作为asynchronous方法启动构build,并返回给用户,与socket.io报告进度? 2)分离构build脚本的subprocess? 3)使用类似https://www.npmjs.com/package/webworker-threads ? 用我看过的几种方法,我就陷在了同样的两个方面。 1)如何监控进度? 2)如果用户重新提交数据,如何中止现有的构build过程? 任何指针将不胜感激…

NodeJS – 如何让亲生小孩与父母沟通?

我正在尝试这个: var child = spawn('node', args, {cwd: parentDir, stdio: 'ipc'} ); (args是一个参数数组) 但它给出了以下错误: TypeError:stdio选项的错误值:ipc 这实际上工作,所以这个问题似乎确实是stdio ipc参数: var child = spawn('node', args, {cwd: parentDir} ); 这也适用: var child = spawn('node', args, {cwd: parentDir, stdio: 'pipe'} ); 我读了这个: http : //nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options,但我不明白我要去哪里错了。 这是我第一次尝试使用这个NodeJSfunction,所以我很抱歉,如果问题是明显的。 也许还有其他方法可以解决这个问题。 孩子必须产卵,而不是分叉,我只是希望能够从孩子发送消息给父母。 谢谢!! 编辑:我有节点v0.8.18。 我search了IPC http://nodejs.org/changelog.html的版本历史logging,search词“IPC”没有任何内容,这让我觉得我需要一个更新版本的NodeJS。

process.send在* nix / Windows上是sync / async?

我有一个Node.js进程(而不是服务器),分叉N个subprocess。 有些时候可能会有超过50个CP。 所以我开始考虑如果process.send(IPC)真的被封锁,那么这可能是每个CP所经历的一个很大的惩罚。 因为在我的程序中发生的事情是,每个CP使用process.send向单个父进程发送消息,以便父​​进程执行日志logging,以便日志同步。 但是,如果process.send阻塞,那么父进程可能会成为瓶颈。 所以问题是 – Node.js IPC在nix和Windows上阻塞还是非阻塞? 如果它阻塞,如果我或其他人真的想要asynchronous IPC,我应该使用消息队列还是ZeroMQ?

将节点标志/parameter passing给subprocess

如果我们在Node中派生一个child_process,我们如何将节点parameter passing给child_process? https://nodejs.org/api/child_process.html 具体来说,我想产卵〜20进程,并希望通过使用 – v8选项限制每个内存的使用情况,但我找不到任何这样做的例子 – 这是可能的或做subprocess承担与父节点相同的节点参数? 父母将是: node foo.js 和孩子们会 node –some-flag=bar baz.js … 我正在寻找使用节点选项 child_process.fork() 但如果只有可能 spawn() 要么 exec() 那么我想我会拿我能得到的。 作为一个简单的例子,下面的代码不会使用–harmony标志运行Node.js var cp = require('child_process'); var args = ['–harmony']; var n = cp.fork(filePath, args , Object.create(process.env));

通过expressjs将子stream程的stdoutstream到浏览器

我们有一个使用nodejs , express和child_process.spawn构build的应用程序。 一个要求就是我们需要在运行时产生一个进程并捕获它的输出并将其呈现给用户。 我们有这个工作。 但是,我们需要找出一种方法来stream式输出,而不是等待subprocess存在。 我们环顾四周,找不到任何明确的例子,并想知道这里有人有什么想法吗? 一切正在工作。 我们只是不关心在显示整个输出之前不得不等待命令完成的用户体验。 如果我们可以对它进行stream式处理,那么当stdout数据事件被触发时,这将是理想的,浏览器将使用新数据进行更新。 就目前而言,它确实是大块的,而不是一个大的块。所以它很适合做这个。

如何用nodejs child_process.spawn捕获ENOENT?

我正在使用spawn来产生一个长时间运行的过程,这个过程随着时间的推移将输出发送到stdio,并由我的nodejs脚本读取和处理。 棘手的部分是,我不能保证发送的命令总是有效的。 我怎样才能捕捉到产卵错误? 最好不涉及安装一个全局exception处理程序,因为我不想处理任何其他exception。 (如果这是唯一的方法,我将需要弄清楚什么时候产生的进程已经正确启动,然后卸载处理程序,这是一个混乱,我不想进入。) 我想要运行的代码是这样的: var spawn = require('child_process').spawn; try { spawn("zargle"); } catch (e) { console.error("I'm handling the error!"); } 但是这只是在节点事件循环的某个地方引发了一个uncaughtExceptionexception,大概是因为这个调用是asynchronous的,甚至没有尝试在我的脚本的时间片上启动subprocess。 只有当spawn根本无法启动进程(例如,名称不正确,引发ENOENT)时,才需要捕获的唯一例外情况。 我不(现在)关心产生的过程可能产生的任何问题。 类似但不同: 如何在node.js上debugging“错误:产生ENOENT”? 我确切地知道为什么我会得到ENOENT,而且我知道该怎么改变才能使错误没有发生。 我的问题是,如果错误是不可避免的,如何正确地回应这种情况。

Node.js将响应对象句柄的句柄传递给subprocess

我有一个http服务器和分叉subprocess。 我希望父级接收请求并使用worker.send传递给分叉进程。 并且工作人员应该能够使用相同的响应对象处理并将响应发送回请求者。 我尝试发送worker.send的第二个参数中的响应对象,但它给出错误This handle type can't be sent var child_process = require('child_process'); var worker = child_process.fork(filename); http.createServer(function (req, res) { worker.send({ 'event': 'start' }, res); // send response object }).listen(4000); 我检查了child_process.js文件,它说如果它不属于某些types,它会抛出错误。 我想知道是否有其他选项可以将响应对象发送给分叉的孩子。 编辑: 好的,这是我发现的,我只是改变了以下 // Instead of // worker.send({ 'event': 'start' }, res); worker.send({ 'event': 'start' }, res.socket); 分叉的进程能够调用write的处理程序。 这是对的吗? 我可以用这种方式吗? 或者在一些等等条件下会有什么暗示?

node.js:如何在前景中产生分离的子节点并退出

根据child_process.spawn 的文档 ,我期望能够在前台运行一个subprocess,并允许节点进程自己退出,如下所示: handoff-exec.js : 'use strict'; var spawn = require('child_process').spawn; // this console.log before the spawn seems to cause // the child to exit immediately, but putting it // afterwards seems to not affect it. //console.log('hello'); var child = spawn( 'ping' , [ '-c', '3', 'google.com' ] , { detached: true, stdio: 'inherit' } […]