Tag: subprocess

如何在请求中使用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) { […]

Node.js中的subprocess之间的通信

我想在node.js中创build一个使用childproccess的fork()方法创build两个进程的程序。 过程如下: Father.js Son1.js Son2.js 我想直接在两个subprocess之间传输数据,而不是在父子之间传输数据。 我向你展示了我想要做的事情。 儿童进程之间的沟通 我试着用下面的代码,但它不适合我。 在father.js代码中,我正在创buildsubprocess,如下所示: const cp = require("child_process"); var son1 = cp.fork("${__dirname}/son1.js"); var son2 = cp.fork("${__dirname}/son2.js"); console.log("father sending message to son1.."); son1.send({msg:'Hi son1',br:son2}); console.log("father sending message to son2.."); son2.send({msg:'Hi son1',br:son1}); Son1.js的代码: var brother=null; process.on('message', function(json) { console.log('message father in son1.js;', json.msg); brother=json.br; brother.send("hello I'm son1.js"); }); 而Son2.js的代码是: var brother=null; […]

Nodejs产生远程的尾部和socket-io到客户端

我对Nodejs相当陌生,我正在构build一个ssh到远程机器的应用程序,并得到一个日志文件的tail -f 。 我正在接收的日志文件的行通过socket-io (版本2.0.3)发送给客户端, 现在,我面临的一个问题是,当第二个浏览器试图tail另一个日志时,新的日志将被发送到两个浏览器,而不是只发出请求的那个。 我不知道这是否是我的socket-io代码或child_process 。 这是服务器: const express = require('express'), app = express(), path = require('path'), bodyParser = require('body-parser'), logger = require('morgan'), server = require('http').Server(app), io = require('socket.io')(server), spawn = require('child_process').spawn, events = require('events'), eventEmitter = new events.EventEmitter(); // Fix body of requests app.use(bodyParser.urlencoded({extended: true})); app.use(bodyParser.json()); // Log the requests app.use(logger('dev')); // […]

node.js child_process spawn忽略等号

我试图用目标设备启动cordova命令。 我已经testing了命令,它的工作原理,但是当我试图用我的代码生成它,它忽略了等号,因此将不会运行。 这个代码不工作只是增加了"–target='iPhone-7-Plus" return new Promise((resolve, reject) => { const executable = "ionic"; const arguments = [ "cordova", buildOnly ? "build" : "run", platform, "–no-interactive", "–verbose", "–target='iPhone-7-Plus'" ].concat(releaseDev === "release" ? ["–prod", "–release"] : []); console.log(executable, arguments.join(" ")); const child = spawn(executable, arguments, { stdio: "inherit" }); child.on("close", () => resolve()); child.on("error", err => reject(err)); […]

在Node.js中获取产卵subprocess的结果

我如何执行一个subprocess,并得到结果退出代码和输出(stdout,stderr)? 就像是 let spawnResult = Node.Child_process.spawnSync("ls"); Js.log("Exit code: " ++ spawnResult.status); Js.log("Stdout: " ++ spawnResult.stdout); Js.log("Stderr: " ++ spawnResult.stderr); 不幸的是,这会导致编译错误: Unbound record field status

输出在nodejs中的subprocess中断

我在ubantu上连接了波分GSM调制解调器 。 我使用node.js语言与GSM调制解调器进行通信。 我通过Child Process向调制解调器发送命令。 这里的例子 var spawn = require("child_process").spawn, exec = require('child_process').exec; // Write dev_ttyUSB15.tmp file var child = exec('cat < /dev/ttyUSB15 > /tmp/dev_ttyUSB15.tmp'); // Read dev_ttyUSB15.tmp file var m1 = spawn('tail',['-f','/tmp/dev_ttyUSB15.tmp']); // on data event is emitted when dev_ttyUSB15.tmp file has some data m1.stdout.on('data', function (data) { console.log("Data : "+data); // this is […]

exec和PATH上的heroku与buildpack

我使用这个buildpack为了在heroku上使用casperjs 。 一旦我的应用程序创build,我检查我的PATH $ heroku config:get PATH /usr/local/bin:/usr/bin:/bin:/app/vendor/phantomjs/bin:/app/vendor/casperjs/bin 好的,casperjs在这里! – Procfile scraper: node scraper.js scraper.js var exec = require('child_process').exec; exec('casperjs casper-script.js'); – 但是,当我启动scraper进程时,它崩溃与以下日志: 2012-10-09T02:23:38+00:00 heroku[scraper.1]: Starting process with command `node scraper.js` 2012-10-09T02:23:39+00:00 app[scraper.1]: bash: node: command not found 为什么exec没有findPATH中的casperjs ? PS:我尝试过spawn但没有更多的运气… [编辑]:一个可testing的要点https://gist.github.com/3856317

如何让我的nodejs应用程序服务于多个用户?

我正在使用nodejs和expressjs框架实现一个非常基本的网站。 这个想法是,用户进入网站,点击一个button,将在服务器中触发一个cpu密集型任务,并在完成任务后在浏览器上获取消息。 我感到困惑的是如何为每个用户完成这个任务,而不阻塞事件循环,因此,没有用户需要等待另一个完成。 另外,如何为每个用户使用已用资源的新实例(对象,variables..)。 玩完和阅读后,我碰到了孩子的过程。 基本上,我想为每个用户分派一个新的child_process,这样无论sorting需要多less时间,它都不会阻塞我的事件循环。 不过,我还不确定这是否是这种情况下最好的做法。 现在,我已经做了我想做的事情,但只有一个用户,但是当尝试启动另一个用户时,事情变得混乱,variables被共享。 我知道我不应该使用在模块中声明的全局variables,但是可以通过另一种方式使variables在单个模块中的函数之间共享,但是对于每个用户它们是不同的! 我知道这个问题可能听起来很基本,但我有点想念节点js是如何为不同的用户提供新的variables,与每个用户相关的对象。 总之,我的问题是:1-节点如何同时为多个用户服务? 我什么时候该如何分stream或执行一个新的subprocess,并且是每个用户还是基于cpu中的我的#个核心?如何分离我的应用程序中每个用户的资源,使得每个用户用户有他自己的计数器,电子邮件和其他对象和variables。 4-我什么时候需要,或者我必须杀死我的subprocess。 提前致谢。 码: var cp = require('child_process'); var child= cp.fork('./routes/mysort-module'); exports.user=function(req,res){ // child = new cp.fork('./routes/mysort-module'); // Should I make new child for each user? child.on('message',function(m){ res.send('DONE');} child.send('START PROCESS'); // Forking a cpu-intensive task in mysort-module.js } 在我的分拣模块中: var variables = require(…); //GLOBAL […]

Node.js分离的subprocess被调用为交互式前台进程

我正在像这样调用一个独立的child_process (在Windows中) var stdout = fs.openSync('./out.log', 'a'); var stderr = fs.openSync('./out.log', 'a'); var child = child_process.spawn('node', ['./main.js'], { detached: true, stdio: [ 'ignore', stdout, stderr ], env: process.env }); child.unref(); 产生的进程,即main.js反过来派生一些使用child_process.fork工人。 通常情况下,孩子和子孩子的过程应该在后台运行,纠正我,如果我错了。 但是在我尝试的时候,subprocess在前台交互式运行。 我不知道是什么原因导致他们这样做。 任何人都可以指出可能是什么问题? 如果我将它设置为false ,它可以正常工作,但是如果没有退出所有的子项,则原始父项不能退出。

错误:使用非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) […]