gpt4 book ai didi

node.js - Node JS。 Child_process.spawn。处理进程的输入提示

转载 作者:搜寻专家 更新时间:2023-11-01 00:06:54 25 4
gpt4 key购买 nike

我目前正在开发我的 git 网络界面。通过 child_process.spawn 访问 git 本身。一切都很好,虽然有简单的“命令 -> 响应”机制,但我不明白我应该如何处理命令提示符(例如 git fetch 要求输入密码)。假设有一些事件被触发,但我不知道该听什么。我在 node.js 进程本身运行的命令行中看到的是“git_user@myserver 的密码:_”。

将此请求重定向到我的 Web 应用程序会很棒,但这有可能吗?

我试过监听messagedatapipeendclose ,在所有流(stdout、stdin、stderr)中可读,但没有人在密码提示时触发。

这是我的工作解决方案(没有提到实验):

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']) .一直以来,我在 Web 界面上只看到加载屏幕,但如果我切换到运行 Node 脚本的命令行窗口,我将看到密码提示。现在假设我无法将窗口切换到控制台,因为我在远程工作。

我想在我的网络界面上看到密码提示。例如,如果 child_process 在提示用户输入时会在 child.stdin(或其他地方)上发出一些事件,那么实现起来就很容易。在那种情况下,我会将字符串“来吧,伙计,git 想知道你的密码!在这里输入它:_______”返回到 Web 客户端(通过 response.end(str)),并将保留等待与客户端响应的下一个 http 连接,其中包含所需的密码。然后简单地 child.stdin.write(pass) 它到 git 进程。

这个解决方案可行吗?或者不涉及父进程命令行的东西。

更新 2

只是尝试将监听器附加到官方文档中描述的所有可能事件:stdout 和 stderr(可读、数据、结束、关闭、错误)、stdin(drain、finish、pipe、unpipe、error)、child(消息、退出、关闭、断开连接、消息)。

在将 git 流传输到它之后,在 process.stdout 和 process.stderr 上尝试了相同的监听器。

没有密码请求时触发...

最佳答案

您的代码无法运行的主要原因是因为您只能在执行后发现 Git 进程发生了什么。

使用spawn的主要原因是因为spawned进程是可以配置的,stdout和stderr是父进程中的Readable streams。

我刚刚试用了这段代码,效果非常好。下面是一个生成进程以执行 git push 的示例。但是,您可能知道 git 会要求您提供用户名和密码。

var spawn = require('child_process').spawn;

var git = spawn('git', ['push', 'origin', 'master']);

git.stderr.on('data', function(data) {
// do something with it
});

git.stderr.pipe(process.stderr);
git.stdout.pipe(process.stdout);
  1. 制作一个本地 git 存储库并进行设置,以便您可以执行上述推送命令。但是,您实际上可以执行任何 git 命令。
  2. 将其复制到名为 git_process.js 的文件中。
  3. 使用 Node git_process.js 运行

关于node.js - Node JS。 Child_process.spawn。处理进程的输入提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33487617/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com