Tag: subprocess

在Node.js中,如何确定subprocess是否已经正常启动?

var spawn = require('child_process').spawn; var child = spawn('some-command'); 我知道我可以防止ENOENT (当some-command不存在时) child.on('error', function(err) { … }) 现在,我如何asynchronous确定进程正在运行, 并没有发生错误 ? 我可以听error和close事件,但是这仍然使得“ 正在运行 ”的情况看起来与“ 操作系统还没有到处寻找文件 ”相同,这可能导致恶劣的竞争条件。 一个open事件会很好,但文件没有提到一个。 function解决方法是否存在?

如何在节点child_process中转义命令注入?

我使用string连接将参数添加到child_process.exec命令,它们被忽略 var exec = require( "child_process" ).exec; var cmd = exec( "grunt build –project="+application, { cwd: application }, function( error, stdout, stderr ){}); cmd.stdout.pipe( process.stdout ); cmd.stderr.pipe( process.stderr ); 为什么string连接是一个问题,以及如何避免它?

从生成的节点进程中捕获ECONNRESET错误

我正在使用sftps NPM使用用户名/密码authentication连接到SFTP服务器并上传文件。 成功的时候,这个工作很好。 但是,如果提供了无效的身份validation信息,几分钟后会发出ECONNRESET错误,导致整个应用程序崩溃。 查看sftps模块的源代码,它似乎使用child_process.spawn来运行shell命令,并且看起来应该正常捕获任何错误: var sftp = spawn(shellCmd, shellOpts); var data = ""; var error = ""; sftp.stdout.on('data', function (res) { data += res; }); sftp.stderr.on('data', function (res) { error += res; }); function finished(err) { error = error.split('\n').filter(function(line) { if (/^Connected to /.test(line)) return false; return true; }).join('\n'); data = data.split('\n').filter(function(line) { if […]

nodejs添加双引号到命令参数?

例: ffmpeg -i test.mkv -metadata title="Test 123" -c copy temp.mkv ffmpeg看到""Test 123"" 。 它发生在spawn()和execFile() 如果我在Windowsshell运行相同的命令ffmpeg正确地看到它作为"Test 123" 那么nodejs怎么了? 这里是nodejs代码: var process = spawn('ffmpeg', [ '-i', inFile, '-metadata', 'title="Test 123"', '-c', 'copy', outFile ]);

如何将参数从运行的Node脚本传递给awk命令?

以下Javascript代码不能正确传递命令string: cp = require("child_process"); var command = "awk < " + mypath + "\" \$3 ~ \"^rs\" {print \$3}\"" cp.exec(command, function (err, stdout, stderr) {}); 是否有一个更合适的节点包或Javascript解决scheme,用于将引号和美元符号传递给在Bash环境中使用在节点中使用child_process时调用的Awk解释器?

node.js – 一次读取100个字节的subprocess标准输出

我产生了一个产生大量数据的孩子(我在这里使用'ls -lR /'作为例子)。 我想同步读取孩子的标准输出100个字节。 所以我想要做的:get100()。然后(process100)。然后(get100)。然后(process100)。然后(… 出于某种原因,这段代码只循环3次,我停止获取可读事件。 我想不出为什么? var Promise = require('bluebird'); var spawn = require("child_process").spawn; var exec = spawn( "ls", [ "-lR", "/"] ); var get100 = function () { return new Promise(function(resolve, reject) { var tryTransfer = function() { var block = exec.stdout.read(100); if (block) { console.log("Got 100 Bytes"); exec.stdout.removeAllListeners('readable'); resolve(); } else console.log("Read […]

连接node.js与Java应用程序,并希望得到输出在HTML中

我在node.js中创build了一个subprocess,并为其提供了一个可执行的jar文件位置。 var fs = require('fs'); var exec = require('child_process').exec; var child = exec('java -jar C:/Users/njaiswal/Desktop/Executable/Saxon.jar', function (error, stdout, stderr){ fs.writeFile('output.html', +stdout); if(error !== null){ console.log("Error -> "+error); } }); module.exports = child; 这是我把它转换成jar文件的Saxon.java。 正如你所看到的,这个java程序需要result1.xml文件和defaultfrontend.xslt样式表,并将其转换为html网页(output.html)。 import java.io.File; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamSource; public class Saxon { /** * Simple transformation method. * * […]

Node.js产生ENOENT错误

所以我遵循了这个答案,并且迈出了最后一步,正确的我想。 但是呢? 我试图运行一个节点文件,但它似乎不在PATH目录中列出的文件中。 我该怎么把它放在那个文件夹里? 我的节点条目文件: 'use strict'; var express = require("express"); var child_process = require("child_process"); var app = express(); app.get("/go", function(req, res, next) { var stream = child_process.spawn("node file.js").on("error", function(error) { console.log("Error!!! : " + error); throw error; }); }); app.get("/", function(req, res, next) { console.log("Hit main page."); res.end("Got me."); }); app.listen( (process.env.PORT || 4000), […]

从父进程派生/产生许多node.js进程的最高性能方式

我正在使用Node.js产生100个以上的subprocess,甚至1000个。我担心的是父进程可能会成为某种瓶颈,如果所有的subprocess的stdout / stderr必须通过父进程为了得到login的地方。 所以我的假设是,为了实现最高性能/吞吐量,我们应该忽略父进程中的stdout / stderr,如下所示: const cp = require('child_process'); items.forEach(function(exec){ const n = cp.spawn('node', [exec], { stdio: ['ignore','ignore','ignore','ipc'] }); }); 我的问题是,以这种方式使用pipe道会有多大的性能损失: // (100+ items to iterate over) items.forEach(function(exec){ const n = cp.spawn('node', [exec], { stdio: ['ignore','pipe','pipe','ipc'] }); }); 这样stdout和stderr被传送到父进程? 我认为性能损失可能会非常激烈,特别是如果我们在父进程中处理stdout / stderr,如下所示: // (100+ items to iterate over) items.forEach(function(exec){ const n = cp.spawn('node', [exec], […]

什么是节点subprocess?

我正在阅读包含child_process库的node.js项目。 究竟是一个孩子的过程? 这是类似的JavaScriptnetworking工作者? 在subprocess中运行进程有什么优势,而不是简单地执行它? 我假设这一些如何让你更多的访问内存?