Articles of 产卵

如何模拟Node.js的child_process产卵function?

有没有简单的方法来模拟Node.js的child_process spawn函数? 我有如下的代码,并希望在unit testing中进行testing,而不必依靠实际的工具调用: var output; var spawn = require('child_process').spawn; var command = spawn('foo', ['get']); command.stdout.on('data', function (data) { output = data; }); command.stdout.on('end', function () { if (output) { callback(null, true); } else { callback(null, false); } }); 有一个(certificate和维护)的库,允许我嘲笑spawn电话,让我指定模拟电话的输出? 我不想依靠工具或操作系统来保持testing的简单和隔离。 我希望能够运行testing,而不必设置复杂的testing夹具,这可能意味着很多工作(包括更改系统configuration)。 是否有捷径可寻?

在页面更改或closures时执行操作

我有一个NodeJS / Express(4.10.2)函数,通过产生一个外部subprocess: app.get('/', function(req, res){ res.sendFile(__dirname + '/index.html'); var spawn = require('child_process').spawn; var java = spawn("java", ['-cp', 'lib\\*;bin', 'com.my.app.App']); … } 我想要做的是添加一些匿名函数,当页面被改变,标签被closures,甚至刷新的时候会被调用。 简而言之,我想杀死产生的过程! Google在研究这个方面对我不好。

Node.js spawn'echo $(python –version)'

我想使用node.js来产生echo $(python –version) ,如果我把它放到我的terminal,它没有问题,我得到像 Python 2.7.12 但是,如果我使用下面的代码: var spawn = require('child_process').spawn var child = spawn('echo', ['$(python –version)']) child.stdout.on('data', function(b){ console.log(b.toString()) }) 我只是把string文字回显给我: $(python –version) 如何逃避参数生成正确,所以我得到正确的输出。 编辑:我特别想使用产卵,回声,我想知道是否有一个解决scheme,以正确地逃离派生参数…

为什么Node.js等待从child_process.spawn发布STDOUTstream数据?

我刚开始着眼于在Electron中构build应用程序,所以如果我以不恰当的方式使用这个问题中的单词构造,我会提前道歉。 在学习的同时,我只是试图将从过去创build的IRC bot收集的所有STDOUT数据发送到应用程序中的div元素。 index.html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Bot World!</title> </head> <body> <h1>Bot World!</h1> <button type="button" id="bot_button">Run Bot</button> <p id="output"></p> </body> <script> document.getElementById('bot_button').addEventListener("click", function (e) { var spawn = require('child_process').spawn; var child = spawn('ruby' , ['/home/syncthetic/Projects/Box/bots/hackthissite']); child.stdout.on('data', function(data) { console.log('stdout: ' + String(data)); document.getElementById('bot_button').innerHTML += String(data) + '</b>'; }); child.stderr.on('data', function(data) { console.log('stdout: […]

无法从特定应用程序的spawnpipe道输出stdout

我有两个脚本A.js和B.js,以及第三方应用程序(这是开源的)。 脚本A.js使用execSync启动第三方应用程序。 脚本B.js使用spawn启动脚本A.js。 如果我自己运行脚本A.js,我可以看到第三方应用程序的整个输出。 当我通过运行脚本B.js间接运行它时,我只能看到一些输出。 A.js const { execSync } = require('child_process'); console.log("Hello"); execSync('mybinary.exe -arg1 -arg2', { stdio: 'inherit' }); B.js const { spawn } = require('child_process'); const app = spawn(process.execPath, ['A.js'], { stdio: ['inherit', null, 'inherit'] }); app.stdout.on('data', (chunk) => { process.stdout.write(chunk); }); 当我启动B,我只看到“你好”,但二进制正在运行(这是一个服务器,我可以打开一个TCP连接到它)。 我只是没有看到输出。 当我自己启动A时,我看到“Hello”和普通的二进制输出。 如果我将B的stdout改为“inherit”,它就可以工作。 为什么会发生这种情况,我该如何解决这个问题? 更新:似乎没有任何关系使用两个脚本。 直接生成二进制文件而不使用stdioinheritance会出现同样的问题。 似乎依赖于第三方应用程序。 如果程序只是打印到标准输出,程序如何影响节点? 背景:我想启动一个服务器,然后在服务器准备就绪时运行一个命令。 准备就绪后,服务器将打印出一条特定的消息。 […]

如何将parameter passing给nodejs中的.sh文件?

我们可以将parameter passing给Nodejs中的.sh文件,我正在尝试生成一个.sh文件,并且想要在产生时传递一些参数, var command = spawn(__dirname + "/import.sh", { var1: "abc" }); 在上面的命令我试图产卵文件import.sh,也试图传递参数一起,我不知道是否是正确的方法 以及如何检索import.sh文件中的variables值?

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)); […]

通过shell命令在Node.js中执行同步事件

您好我正在编写tests in Protractor ,我想在conf.js做一些数据库还原,我通过使用node shell command通过Node.Js项目spawn 。 该代码确实工作正常,并恢复数据库。 但主要的问题是它作为asynchronous,主线程不等待恢复完成。 这是我的代码。 var dbServer = '(local)'; var spawn = require('child_process').spawn; spawn('sqlcmd', ['-S', dbServer, '-i', 'resources/databaseRestore.sql'] ,function (error, stdout, stderr) { console.log('stdout: ' + stdout); console.log('stderr: ' + stderr); if (error !== null) { console.log('exec error: ' + error); } }); 我可以等待这个函数在任何其他工作之前被执行吗? 我已经看到require('fs')一些例子,但不知道如何得到这个实现。

无法从subprocess获取输出

所以,我有一个简单的应用程序(我写了)写入stdout 。 当我自己运行它,输出正在打印罚款。 现在,当我用节点产生进程时…没有任何事情发生(除了一个消息说过程已经完成) 这是我的代码: var spawn = require('child_process').spawn; helper = spawn("myApp", []); helper.stdout.on('data', function(data) { console.log("GOT: " + data); }); helper.stdout.on('end', function(data) { console.log("FINISHED: " + data); }); helper.on('exit', function(code) { console.log("CLOSED!"); }); 这里是输出: FINISHED: undefined CLOSED! 是的,就是这样。 这是怎么回事? 我错过了什么吗?

在Grunt中显示输出为命令运行?

在这里,我没有输出,命令永远运行: grunt.registerTask('serve', function () { var done = this.async(); grunt.util.spawn({ cmd: 'jekyll', args: ['serve'], stdio: 'inherit' }, function (err, res, exit_code) { res.stdout && console.info(res.stdout); exit_code && console.error(res.stderr); done(err); }); }); 我想输出(和命令运行,直到错误或中断)。