gpt4 book ai didi

javascript - NodeJS 中远程主机上的 Spawn 进程

转载 作者:行者123 更新时间:2023-12-03 06:45:26 27 4
gpt4 key购买 nike

我有一个简单的 Node 服务器,它提供一个带有按钮的页面。单击该按钮需要在远程主机上执行命令。命令完成后,输出应提供给函数的响应并显示在 html 中。

目前这是服务器代码:

app.use(logger("combined"));
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());

app.get('/index.html', function (req, res) {
res.sendFile( __dirname + "/" + "index.html" );
})

app.post('/connect', function (req, res) {
var spawn = require('cross-spawn-async');
var mpiProc = spawn('ssh','pi@raspi2','"ls"', { stdio: ['pipe','pipe',2,'pipe'] });

var grid = "...8.1..........435............7.8........1...2..3....6......75..34........2..6..";
str = "";
mpiProc.stdout.on('data', function(data) {
console.log(data);
str = data.toString();
res.write('data: ' + JSON.stringify({ msg : str }) + '\n\n');
// Output
});

mpiProc.on('close', function(code) {
res.end(str);
// Script exit code
});

mpiProc.on('error', function(code) {
res.end('stderr: ' + code);
// Script exit code
});
})
require('http').createServer(app).listen(3000, function(){
console.log('Listening on 3000');
});

如您所见,以下调用尝试在远程主机上执行“ls”命令:

var mpiProc = spawn('ssh','pi@raspi2','"ls"', { stdio: ['pipe','pipe',2,'pipe'] });

但这不会返回任何内容,当直接从终端从服务器执行时,它会返回目录内容列表。为了测试该命令是否以这种方式与生成一起工作,我尝试这样做:

var mpiProc = spawn('ls', { stdio: ['pipe','pipe',2,'pipe'] });

这会返回我所期望的服务器上的目录内容列表。那么如何创建到远程主机的管道来执行命令,然后将命令的结果存储在服务器上?

最佳答案

传递给 spawn() 的第二个参数是一个参数数组。此外,您不需要手动引用您的论点。这应该有效:

spawn('ssh', ['pi@raspi2', 'ls'], { stdio: ['pipe', 'pipe', 2, 'pipe'] });

最后,如果您想要对 ssh 连接进行更多编程(且轻量级)控制,可以使用 ssh2模块(或在其之上构建的任何模块),不使用子进程。

关于javascript - NodeJS 中远程主机上的 Spawn 进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37762215/

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