Articles of 产生

Node.js在spawing之后分离一个产生的小孩

我正在使用一个detached child_process的stderrstreamredirect到一个文件 fd = fs.openSync('./err.log', 'a'); 并将这个fd作为stderr传入spawn 。 我正在寻找一种方法来截取写入文件的数据。 这意味着,当那个subprocess写什么的时候,我想在写入这个文件之前先处理它。 我试着做一个可写的stream,并给它,而不是文件描述符产卵。 但是这并没有帮助。 任何人都可以build议我怎么能做到这一点? 另外,我可以正常产生一个child_process( detached = false ),并监听child.stdout data事件,当我准备好时,我可以分离孩子。 所以基本上,我想要一些来自child_process初始数据,然后让它作为后台进程运行并终止父进程。

Nodejs总是不能完全捕获subprocess的stdout数据,除非subprocessfllush(stdout)

我使用nodejs来捕获它的subprocess的stdout数据,但总是捕获subprocess的stdout数据的前一部分。 当我添加fllush(stdout)时 ,它工作正常。 但是我不知道为什么,也不想添加flush(stdout)。 这是我的代码: var tail_child = spawn(exefile, [arg1, arg2, arg3]); tail_child.stdin.write('msg\n'); tail_child.stdout.on('data', function(data) { console.log(data); }); child_process.c printf("data\n"); 需要你的帮助! 非常感谢你!

节点:追加输出到现有的文件

我想追加stdout输出到一个现有的文件。 但它改写它。 代码:spawn tee … teeForStdout = spawn( 'tee', [ 'pathtologfile' ], { detached: true, env: process.env, stdio: 'pipe' }); 产生命令… executedProcess = spawn(command, parameters, { detached: true, env: process.env, stdio: ['pipe', 'pipe', process.stdout] }); 尝试login标准input发球… executedProcess.stdout.pipe(teeForStdout.stdin); 我究竟做错了什么? thx任何帮助M.

Blender命令行的Node.js产生?

我需要搅拌机命令行访问,虽然spawn但继续运行到一个ENOENT错误,很难找出缺less的东西。 示例应用程序中传递的命令行在terminal中运行。 以下是关于环境和我正在使用的示例脚本的一些细节。 环境(OSX El Capitan) 安装搅拌机2.76b与: brew install Caskroom/cask/blender 然后添加alias到bash_profile进行terminal访问: alias blender="/Applications/blender/Blender.app/Contents/MacOS/blender" testing代码 #!/usr/bin/env node var child_process = require('child_process'); var arguments = [ '-b', 'recipe.blend', '-o', 'test-#', '-f', 0 ]; console.log("values: ", arguments); var child = child_process.spawn('blender', arguments); child.stdout.on('data', function(data) { console.log('data out: ', data.toString()); }); child.stderr.on('data', function(data) { console.error('error out: ',data); }); child.on('close', […]

承诺解决子stream标准输出和拒绝子stream标准错误

我想build立一个使用require('child_process').spawn产生subprocess的承诺。 这个过程把它的输出输出到stdout ,把它的错误输出到stdout stderr 。 我希望承诺: 如果child.stderr发出任何数据,则reject(child.stderr stream (or its data)) 。 resolve(child.stdout stream)只有当没有错误发射。 我这样做是因为我想把承诺链接到: then处理child.stdoutstream(将stream上传到S3存储桶)。 一个可以处理child.stderrstream的catch ,允许我正确处理错误。 把这样的承诺和stream程结合起来是否可行? 我正在考虑在stderr上工作,但是不知道如何在stdout之间发生什么,如果有大量的数据进入它,我不处理它的速度不够快。

如何在请求中使用child_process spawn的结果(获取ENOENT)

当执行包含下面的确切代码的js文件时,我得到一个ENOENT。 而我不知道如何解决这个问题。 任何解释或build议是受欢迎的,但我更喜欢解决scheme,我试图做到这一点。 (除非我做的事情当然是愚蠢的) 我已经写了这个假的请求函数用于testing目的: (function imaginaryRequest(req, res) { getDiskInfo('/dev/simfs', info => { console.log(info.ratio) }) }()) 它应该使用getDiskInfo函数使用child_process.spawn来获得df -Ph输出并将其存储到一个对象中。 /** * Get information on the disk space of the specified File system * @param {string} sysFile (ex: /dev/sda) * @param {function} callback * @return {object} df -Ph output stored into object */ function getDiskInfo(sysFile, callback) { […]

错误:使用非root用户使用Node.js child_process时,在errnoException(child_process.j2:980:11)处产生ENOENT

我遇到了这个错误在MacOS和Linux中使用node.js v0.10.12,这段代码在Windows 7中工作正常。唯一的区别是在Windows 7我有pipe理员身份,在MacOSX和Linux上,我不是根,只是计划用户。 我们是否需要root来与child_process一起工作? 任何线索,为什么它在一些操作系统,而不是所有的? 非常感谢, 这是代码: var spawn = require('child_process').spawn; try { var child = spawn('node', ['plusone.js']); //call every minute setInterval(function() { // var number = Math.floor(Math.random() * 10000); child.stdin.write(number +'\n'); child.stdout.once('data', function(data) { console.log('child replied to '+ number +' with ' +data); }); },1500); child.stderr.on('data', function(data) { process.stdout.write(data); }); } catch (e) […]

Node.js同步返回多个asynchronous收益的结果

我正在使用rethinkDB与node.js. 以下请求正常工作: function myFn () { return co(function *() { let query; query = yield r.db("my-db") .table("app") .filter(r.row("id").eq(id)) .run(conn); return query.toArray(); }); } 我想asynchronous返回多个yield的结果,但是下面的失败: function myFn () { return co(function *() { let query, query2; query = r.db("my-db") .table("app") .filter(r.row("id").eq(id)) .run(conn); query2 = r.db("my-db") .table("app") .filter(…) .run(conn); return yield {q1 : query, q2 : query2}; […]

为什么nodejs产生的进程变成<defunct>直到父进程退出

我们先看看这个现象, Nodejs代码: const cp = require('child_process'); var ls = cp.spawn('ls', ['/']); ls.stdout.on('data', (data) => { console.log(`stdout: ${data}`); }); ls.stderr.on('data', (data) => { console.log(`stderr: ${data}`); }); ls.on('close', (code) => { console.log(`child process closed with code ${code}`); }); while(true){} 运行这个nodejs代码,没有任何显示,似乎没有事件被触发。 然后在另一个shell中运行“ps -ef | grep ls | grpe -v grep”,结果是: liyuanq+ 10995 10990 0 11:06 pts/3 00:00:00 [ls] […]

产生交互式进程并在NodeJS中退出

我试图完成(我认为)一个相当简单的事情,但找不到任何现有的答案,所以在这里。 我想在节点中模仿下面的bash脚本: #!/usr/bin/bash mysql 所以基本上就像在命令行input“mysql”一样。 到目前为止,我提出了以下几点: var spawn = require('child_process').spawn; var child = spawn('/usr/bin/mysql', [], {stdio: 'inherit', detached: true}); child.unref(); 这工作正常(呈现给我的MySQL提示符),但是当我键入一个命令它被发送到bash命令行不是MySQL。 我试过其他的stdio选项(pipe道,忽略)与标准输出,stderr等听众,但这让我尽可能悬空提示。 任何和所有build议表示赞赏!