Tag: 产生

如何检测节点产生的进程是否仍在运行?

我可以产生一个像这样的过程: var spawn = require('child_process').spawn; var topicListener = spawn('python', ['topic_listener.py','Node.js'], {env: { TWITTER_CONSUMER_SECRET: process.env.TWITTER_CONSUMER_SECRET, TWITTER_CONSUMER_KEY: process.env.TWITTER_CONSUMER_KEY, TWITTER_TOKEN_SECRET: process.env.TWITTER_TOKEN_SECRET, TWITTER_ACCESS_TOKEN: process.env.TWITTER_ACCESS_TOKEN }}); topicListener.stdout.on('data', function (data) { console.log(data.toString()); }); topicListener.stderr.on('data', function (data) { console.log(data.toString()); }); topicListener.on('close', function (code) { console.log("EXITED " + code); }); 所以我当然可以用.on(close, …)来控制它.on(close, …)但是如果一个进程仍然存在,还有什么其他方法可以控制吗?

使用节点jsclosures.exe文件

我正在使用此节点的js代码来运行包含无限循环的App.exe文件。 我通过input并从App.exe获取输出。 var bat = null; app.post("/api/run", function(req, res) { if(req.body.success) { if(bat) bat.kill(); } if(!bat) { bat = spawn('cmd.exe', ['/c App.exe']); bat.stderr.on('data', function (data) { res.end(JSON.stringify({error: true, message: data.toString()})); }); bat.on('exit', function (code) { bat = null; console.log('Child exited with code ' + code); res.end(JSON.stringify({error: false, message: "Application Closed!"})); }); } bat.stdin.write(req.body.input+'\n'); bat.stdout.once('data', function […]

使用NodeJS child_processes.spawn运行脚本时打开的文件过多

场景: 使用主脚本产生可变数量的subprocess可变次数,以便对服务器执行负载testing。 主脚本最初产生所有可能的子(根据它的configuration设置),然后当subprocess退出,如果有更多的configuration请求运行,那么新的子代将被启动。 我所看到的是在试图启动第83次儿童进程时立即失败。 83? 我没有做任何事情来明确地closures作为子产卵过程的一部分打开的文件,但大概这不是开放代码的工作,而是child_processes模块代码? 我很好奇82个subprocess的神奇数字。 这似乎表明了一些有关节点的限制或我的系统上的某些节点的组合? 理想情况下,我有一些缺乏知识,这个问题会回答,或者有人可以build议一个替代方法来启动不会遇到这个问题的脚本的subprocess? 我也有兴趣了解即将到来的NodeJS的Web Worker API的状态。 任何人都知道吗? 细节: NodeJS v0.4.7 Mac OS X v10.6.7 ulimit -n = 256 将会成功运行的产卵小孩数量为82个(这意味着> 82个产生的特效会抛出“太多打开的文件”的错误) 谢谢你的帮助。

读取等待input的产生的进程的stdout

我有一个Swift程序,在等待\n (终止执行)时将信息logging到stdout 。 开始运行后立即请求input,并在1〜2秒后logging信息: fetchAndLogDataInBackground(); // will print some data in ~1 sec readLine(); 我正在spawn / execFile用以下方式进行文件编辑: const spawn = require('child_process').spawn; const process = spawn('swift/main'); process.stdout.on('data', data => console.log(data.toString())); setTimeout(() => { process.stdin.write('\n'); }, 5000); 因为我正在使用on('data') ,所以我期望看到日志“live”,但是它们只是在process.stdin.write('\n');之后才被处理process.stdin.write('\n'); 有什么办法让数据“活”? PS:如果我在terminal( swift/main )中运行Swift程序,它可以正常工作。

无法使用交互式脚本获取child_process.spawn的输出

我不能在下面的代码中得到任何输出: var spawn = require('child_process').spawn, script = 'ftp', child = spawn(script); child.stdout.on('data', function (data) { console.log('stdout: ' + data); }); child.stderr.on('data', function (data) { console.log('stderr: ' + data); }); child.on('close', function (code) { console.log('child process exited with code ' + code); }); 它适用于诸如'ls','pwd'等正常脚本,但不适用于诸如'ftp','telnet'之类的交互式程序。 有什么build议么? 编辑: 以另一个脚本为例: #!/usr/bin/env python name = raw_input("your name>") print name 当生成这个脚本时,我想用数据事件来获取提示“your […]

为什么我通过spawn()挂起创build的Nodesubprocess?

我使用spawn()进行git调用。 有时它可以正常工作,但是其他人似乎是挂起来的。 我没有看到任何事件发生(错误,退出,closures),但我看到证据表明这个过程确实完成了。 var spawn = require('child_process').spawn; spawn('git', ['push', 'origin', 'master']) .on('error', function(error) { console.log("ERROR: DETAILS: " + error); }) .on('close', function(code) { console.log("SUCCESS: CODE: " + code); }) .on('exit', function(code) { console.log("EXIT: CODE: " + code); })

使用生成器函数next()作为node.js中的callback函数

我正在写一些node.js通过串口连接与传感器交互。 读取传感器的代码自然是asynchronous的。 然而,在我的控制代码中,我需要读取一个传感器,根据这个值做一些事情,再读一遍,做一些其他的事情等。为此,我使用如下的自包含testing代码: var main = new Main(); main.next(); function* Main() { var reading = yield readSensor(this.next.bind(this)); console.log(reading); var reading = yield readSensor(this.next.bind(this)); console.log(reading); } function readSensor(callback) { // simulate asynchrounous callback from reading sensor setTimeout(function sensorCallback() { callback('foo'); }, 100); } 所以,我的顺序控制代码是在一个生成器,当它需要读取时产生readSensor() 。 传感器读数完成后,它会调用callback,控制返回到主代码。 我这样做是因为我可能需要根据以前的读数以不同的顺序读取各种传感器。 所以,这里是有问题的部分:我将this.next.bind(this)作为callback传递给asynchronous读取函数。 代码似乎工作时,生成器启用( –harmony_generators ),但我想知道是否有缺陷在这里,我失踪。 我对JS比较新,所以不要害怕指出明显的:)

在node.js中产生subprocess时出错

我试图得到一个小小的ffmpeg转换器服务,并取得了很好的进展。 但是,当涉及到产生转换的实际ffmpeg过程时,我正在打砖墙。 // options.ffmpegopts is an array containing format-specific parameters var args = [ '-y', '"' + options.targetfile + '"' ]; args = options.ffmpegopts.concat(args); var ffmpegProc = spawn('ffmpeg ', args); ffmpegProc.stderr.on('data', function(data) { console.log('stderr: ' + data); }); 执行此代码时,我得到以下控制台输出: stderr: execvp(): No such file or directory 我已经检查了不同的节点版本(0.4.0,0.4.2和0.5.0-pre),没有任何影响。 另一个非常奇怪的行为是,我必须调用spawn,包括一个空格( 'ffmpeg '而不是'ffmpeg' )。 如果我省略这个空间,我得到一个不同的错误( stderr: "/path/to/my/movie.mpeg": no […]

节点child_process.spawn多个命令

我想自动创build和提取密钥库。 我面临的问题是如何使用“ | ”来join命令 符号或类似的解决scheme。 //Original Command var command='keytool -exportcert -storepass mypass -keypass mypass -alias myalias -keystore mykey.keystore | openssl sha1 -binary | openssl base64'; //Arguments for the spawn var keyArgs = [ '-exportcert', '-storepass','mypass', '-keypass','mypass', '-alias','myalias', '-keystore',"myjey.keystore", 'openssl','sha1', '-binary', 'openssl','base64', ]; exec('keytool',keyArgs,{cwd:appCreateFolder+"/"+opt.id+"/Certificates"},function(e){ console.log(chalk.cyan('Key created')); })

child_process在node.js安全/转义中产生

在Node中,我使用了一个模块( GM ),并注意到它使用了child_process模块中的spawn来传递参数给GraphicMagick的convert可执行文件。 我将用户提交的信息传递给GM​​。 是否有安全问题,用户可以使用pipe道(或其他命令行欺骗)进行某种注入攻击? 还是spawn保护呢? 如果不是的话,在这种情况下是否有逃避用户提交值的最佳做法?