Tag: subprocess

的NodeJS。 Child_process.spawn。 处理进程“input提示

我目前正在为我的网页界面工作。 通过child_process.spawn访问git本身。 一切都很好,虽然有简单的“命令 – >响应”机制,但我不明白我应该怎么做命令提示符( git fetch要求密码为例)。 假设有一些事件被解雇,但我不知道该听什么。 我所看到的是在命令行中的“ git_user@myserver's password: _ ”,其中node.js进程本身正在运行。 将这个请求redirect到我的web应用程序会很好,但这甚至有可能吗? 我试着听所有stream(stdout,stdin,stderr)的message , data , pipe , end , close和readable ,但是没有人会在密码提示时触发。 这是我的工作解决scheme(没有提到实验): var out=""; var err=""; var proc=spawn(exe,cmd); proc.on("exit",function(exitCode){ }); proc.stdout.on("data",function(data){ out+=data; }); proc.stderr.on("data",function(data){ err+=data; }); proc.on("close",function(code){ if(!code)func(out); else return errHandler(err); }); 你能帮我调查一下吗? UPDATE 现状:在我的GIT网页界面有一个“FETCH”button(例如,对于简单的“git fetch”)。 当我按下它时,http请求被生成并被发送到由http.createServer(callback).listen(8080)创build的node.js服务器。 callback函数接收到我的请求并创buildchild_process.spawn('git',['-C','path/to/local/repo','fetch']) 。 所有这一次,我只看到我的Web界面加载屏幕,但如果我切换到节点脚本正在运行的命令行窗口,我会看到一个密码提示。 现在让我们假装我不能把窗口切换到控制台,因为我远程工作。 我想在我的Web界面上看到密码提示。 […]

Node.js作为服务,exec不起作用

我使用nssm作为服务运行Node.js项目。 当用户点击我的nodejs网站上的button时,它应该运行require('child_process').exec('cmd /c batfile.bat', function({ res.send(somedata); });而是跳过正在运行的bat文件并跳转到res.send(somedata) 。为什么是这样的?当我运行Node.js使用cmd和npm start server.js它工作正常。如何使exec执行工作,同时运行nodejs作为服务? 编辑一些代码: require('child_process').exec('cmd /c batfile.bat', function(){ var log = fs.readFileSync('logs/batlog.log', 'utf8'); var html = fs.readFileSync('logs/batlog.htm', 'utf8'); var json = {"log": log, "html": html}; res.send(json); }); batfile.bat应该生成这两个文件,但是如果我将nodejs作为服务运行,则不会。

节点:产卵的孩子,但自杀

有没有办法像npm start那样运行一个完全独立于主机的shell命令,这样就可以自杀了? 我试图用Node.js开发一个自我更新的应用程序。 我的计划是这样的: [Main]下载一个独立的更新应用程序(这也是一个Node.js应用程序) [Main]安装updater的依赖关系: npm install [Main]启动updater: npm start [主]杀死自己(主要应用程序): process.exit() [更新器]下载主应用程序的新版本 [更新程序]安装主应用程序的依赖关系: npm install [更新程序]使用以下命令重新启动主应用程序: npm start [更新]杀死自己(更新): process.exit() 完成。 我只知道child_process.exec()和child_process.spawn() ,但是当主应用程序使用process.exit() 这通常是一个坏主意,什么是更好的方法? 如果没有,那么在杀死主应用程序的时候,我怎么能让updater保持活着呢?

当第一个节点prcess分叉一秒时,VSCode不会停在断点上

第一个问题是,当你从你的app.js文件中执行以下操作时,会出现一些冲突错误,并按F5进行debugging: var cp = require('child_process'); var node2 = cp.fork('./ app_FORK.js'); 错误:侦听EADDRINUSE ::: 15838在Object.exports._errnoException(util.js:856:11) 我和VS社区有同样的问题,所以我在那里做了以下工作:var node2 = cp.fork('./ app_FORK.js',[],{execArgv:['–debug = 5859']} ); 但是,在VS Code中,它似乎没有工作。 我放置断点,或尝试从命令行启动节点后附加,它出错。

杀死一个产生的电子实例

我正在使用Atom电子为我的一个项目。 在我的代码的某个时候,我正在使用 var child = child_process.spawn(process.argv[0], [_path.app], {cwd: _path.resources, detached: true, stdio: ['pipe', 'pipe', 'pipe', 'ipc']}); 开始另一个应该做的电子实例..好吧,东西。 现在,子电子应用程序在某个时候可能会变得没有反应,我想杀了它。 但是,如果我只是跟着去 child.kill(); 我只是杀了Electron应用程序的几个进程之一。 所以我想知道:有没有更好的方法来做到这一点? 我想得到的是杀死孩子。 从存在擦拭它。 在没有征得其许可的情况下将其放到被遗忘的地方。 有没有办法做到这一点? 我的另外一个select就是将这个消息以please-die的forms发送给我,但是由于孩子可能行为不当,我不确定这个解决scheme是否有效,孩子会select什么。

节点运行命令提示用户

我试图从一个叫node的.js文件运行一个命令(aws configure)。 我一直在使用child_process ,它允许我执行一个命令或batch file。 但是,如果该文件通常会提示用户input用户名和密码,则无法进行交互。 我尝试使用process.stdin节点为了也许使用节点作为用户的input的中间人,但我无法将两者连接在一起。 如果有人有任何想法,将是伟大的! var spawn = require('child_process').spawn; var mystdin = process.stdin; var conf = spawn('aws configure', {input: mystdin, shell: true}); //When command returns conf.stdout.on('data', function(data) { console.log('stdout: ' + data); //prompt for input mystdin.resume(); mystdin.setEncoding('utf8'); var util = require('util'); mystdin.on('data', function (text) { //INSERT ANSWER HERE console.log('received data:', util.inspect(text)); if […]

我怎样才能从nodejs刷新subprocess?

我使用spawn从nodejs调用一个可执行的C程序,但是C程序似乎没有每次都被刷新。 然后,当缓冲区已满(4K)或subprocess退出时,我的节点程序只能输出subprocess的stdout。 简单来说,这两个部分的代码应该是: invoke.js var spawn = require("child_process").spawn; var ps = spawn("./echo"); ps.stdout.on("data", (data) => { console.log(`${data}`); }); process.on("SIGINT", ps.kill); echo.c #include <stdio.h> #include <signal.h> #include <unistd.h> static volatile int keep = 1; void intHandler(int d){ keep = 0; } int main(){ signal(SIGINT, intHandler); int count = 0; while(keep) { printf("%d hello world!\r\n", ++count); sleep(1); […]

Nodejssubprocess在容器docker中产生

我正在dockerizing一个Node.js HTTP自适应stream媒体Web应用程序。 在Nodejs服务器中,我使用subprocess(spawn)调用FFMPEG将用户上传的文件编码为不同的比特率,之后我再调用MP4Box来突破比特率。 spawn('MP4Box', argDash, {cwd: './uploads'}); spawn('ffmpeg', arrStr, {cwd: './uploads'}); 如何在容器内部运行nodejs服务器时调用这两个程序?

childprocess.spawn或exec通过stderr而不是stdout显示输出

此代码: const spawn = require('child_process').spawn; const convert = spawn('convert', ['nda.pdf', 'nda.jpg']); convert.stdout.on('data', function (data) { console.log('stdout: ' + data.toString()); }); convert.stderr.on('data', function (data) { console.log('stderr: ' + data.toString()); }); convert.on('exit', function (code) { console.log('child process exited with code ' + code.toString()); }); 显示这个输出: stderr: /tmp/magick-27144xZVKt6FGxrJR1 PNG 2409×3420 2409×3420+0+0 8-bit sRGB 1.027MB stderr: 0.150u 0:00.149 stderr: […]

如何检查在NodeJS中是否成功创buildsubprocess

我试图打开一个文件使用像下面的Node JS的child_process var child_process =require('child_process'); var spawn = child_process.spawn; var exePath='<exe's path>' var filePath='<file path>' var childProcess = spawn(exePath, [filePath]); childProcess.stdout.on('data', (res) => { console.log('in spawn data'); console.log(res); }) childProcess.stderr.on('data', (err) => { throw err; }); 这里的问题是,我的文件被打开在指定的exe文件正确..但是callback从来没有被称为…我猜它是因为在打开文件后exe不会返回任何输出它只是打开文件。 另外,如果文件名中有错误,则callback函数也不会触发 题 我怎么知道这个过程是成功创build的。 有没有什么事情可以让我知道这个孩subprocess的成功创造。 为什么错误callback不会在发生错误时触发。