Articles of subprocess

nodejs gruntsubprocesscallback函数的例子

你会好心帮助下面一个节点执行命令运行与咕噜的例子? echo命令正在执行,并且创build了hello-world.txt ,但callback函数中的grunt.log.writeln命令不会触发。 var exec = require('child_process').exec, child; child = exec('echo hello, world! > hello-world.txt', function(error, stdout, stderr){ grunt.log.writeln('stdout: ' + stdout); grunt.log.writeln('stderr: ' + stderr); if (error !== null) { grunt.log.writeln('exec error: ' + error); } } ); 参考文献: http://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options 从节点subprocess中检索一个值

如何stream入/从节点中的文件描述符?

fs.createReadStream()和fs.createWriteStream()只支持文件path,但是我需要从文件描述符(从subprocess传入/从subprocess)读取(或写入)。 注意我需要Streams,所以fs.open/fs.read/fs.write是不够的。

如何在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,而且我知道该怎么改变才能使错误没有发生。 我的问题是,如果错误是不可避免的,如何正确地回应这种情况。