我已经尝试在所有流(stdout、stdin、stderr)上监听message、data、pipe、end、close、readable,但没有一个在密码提示上触发。
这是我的工作解决方案(没有提到实验):
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);
});
能帮我调查一下吗?
更新
目前的情况是:在我的GIT网页界面上有一个“FETCH”按钮(例如,用于简单的“git fetch”)。当我按下它时,会生成HTTP请求并发送到由http.createServer(callback).listen(8080)
创建的node.js服务器。 callback
函数接收我的请求并创建child_process.spawn('git',['-C','path/to/local/repo','fetch'])
。这段时间内,我只看到我的网页界面上有加载页面,但是如果我切换到运行node脚本的命令行窗口,我会看到密码提示符。现在假设我无法切换到控制台窗口,因为我是远程工作。
我想在我的网页界面上看到密码提示符。如果child_process会在要求用户输入时在child.stdin
(或其他位置)发出某些事件,那将非常容易实现。在这种情况下,我将字符串“来吧,小伙子,git想知道你的密码!在这里输入:_______”发送回Web客户端(通过response.end(str)
),并将继续等待包含所需密码的客户端响应的下一个http连接。然后只需将其child.stdin.write(pass)
写入git进程即可。
这个解决方案可行吗?或者有没有不涉及父进程的命令行的解决方法。
更新2
刚刚尝试了在所有可能的事件(stdout和stderr(可读,数据,结束,关闭,错误),stdin(drain,完成,pipe,unpipe,错误),child(消息,退出,关闭,断开连接,消息))上添加侦听器。将git流导入后,尝试在process.stdout,process.stderr上使用相同的侦听器。
密码请求上没有触发任何操作...