- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在构建一个 node.js 应用程序来管理服务器。在此应用程序中,我可以创建一些 shell 脚本并通过单击按钮在服务器上执行它们。
这是我的 routes.js 文件中用于此操作的内容:
app.get('/exec', isLoggedIn, function(req, res) {
var url = require('url');
var url_parts = url.parse(req.url, true);
var query = url_parts.query;
var Server = require('../app/models/server');
var Script = require('../app/models/script');
var async = require('async');
var scriptId = query.scriptId;
var userId = query.userId;
var serverId = query.serverId;
var stdout = "";
var stderr = "";
async.parallel({
servers: function(callback){
Server.find({"_id" : serverId}).exec(callback);
},
scripts: function(callback){
Script.find({"_id" : scriptId}).exec(callback);
}
}, function(err, results) {
if (err)
res.send(err);
var selectedServer = results.servers;
var selectedScript = results.scripts;
var serverIp = selectedServer[0].serverDetails.serverAddress;
var serverPort = selectedServer[0].serverDetails.serverPort;
var serverUsername = selectedServer[0].serverDetails.serverUsername;
var scriptContent = selectedScript[0].scriptDetails.scriptContent;
var Connection = require('ssh2');
var conn = new Connection();
conn.on('ready', function() {
//console.log('Connection :: ready');
conn.exec(scriptContent, function(err, stream) {
if (err) throw err;
stream.on('exit', function(code, signal) {
//console.log('Stream :: exit :: code: ' + code + ', signal: ' + signal);
}).on('close', function() {
//console.log('Stream :: close');
conn.end();
}).on('data', function(data_out) {
console.log('STDOUT: \n' + data_out);
stdout = stdout + data_out;
res.render('execresults.ejs', {
stdout : stdout
});
}).stderr.on('data', function(data_err) {
console.log('STDERR: \n' + data_err);
});
});
}).connect({
host: serverIp,
port: serverPort,
username: serverUsername,
privateKey: require('fs').readFileSync('id_rsa')
});
conn.on('error', function(e) { console.log("Connection failed or timed out")});
});
});
它工作正常,我在控制台中看到了执行结果。但我想在 ejs 页面的两个文本区域中同时显示 stdout 和 stderr 结果。
问题是当我运行一个像“正常运行时间”这样的简单命令时,它起作用了,我将在我的文本区域中显示标准输出结果。
但是当 shell 脚本同时返回 stdout 和 stderr 时,或者如果 stdout 是大量文本,我没有将所有内容都传递到我的 ejs 页面,因为我认为这个错误:错误:不能发送后设置 header 。
我的问题是:如何将 stdout 和 stderr 都发送到我的 ejs 页面,只有当脚本完全执行时?我试图通过连接所有 stdout 输出来构建一个“stdout”变量,但它似乎不起作用......
有人可以帮助我吗?
非常感谢
最佳答案
假设进程最终自行结束并且它不会输出大量数据,您可能只缓冲数据然后在进程关闭时呈现:
conn.exec(scriptContent, function(err, stream) {
if (err)
return res.send(err);
var stdout = '',
stderr = '';
stream.on('close', function() {
conn.end();
res.render('execresults.ejs', {
stdout: stdout,
stderr: stderr
});
}).on('data', function(data) {
stdout += data;
}).stderr.on('data', function(data) {
stderr += data;
});
});
其次,
if (err)
res.send(err);
确实应该有一个返回
:
if (err)
return res.send(err);
防止进一步执行错误。
关于javascript - 在 textarea 中显示 ssh2 stdout 和 stderr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28002103/
我想阅读 php://stderr。怎么做到的? php://stderr 和 STDERR 是否写入同一个文件?因为在写入 php://stderr 后,我尝试使用 stream_get_conte
我不确定这个问题是 Python 还是 shell 问题。 我有一个 Python 程序,它在命令上使用子进程调用,该命令可以在 stderr 上发出错误消息。我自己的程序也使用 sys.stderr
如何重定向命令的输出,以便 stdout 和 stderr 都记录在文件中,并且我仍然希望 stderr 显示为输出。 我也不想使用 bash 来执行此操作。有这样的办法吗? 最佳答案 这很简单: $
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 7 年前。 Improve this qu
我得到了以下批处理命令 echo 1 & echo 2 1>&2 & echo 3 有时这会打印 1 2 3有时 132 我怎样才能控制顺序?我必须得到订单。 是否有启用以下功能的命令? echo 1
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Ruby $stdout vs. STDOUT STDERR 通常比使用 $stderr 更受青睐,还是相反
这是我经常尝试完成的任务。我想将 stderr 和 stdout 都记录到日志文件中。但我只想打印到控制台 stderr。 我尝试过使用 tee,但是一旦我使用“2>&1”合并了 stderr 和 s
我想要做的是将 stderr 重定向到 stdout,而不更改 stderr 的输出。 比如说,命令在stderr中有输出,我想将stderr中的所有内容输出到屏幕,同时还通过grep处理信息并将其保
我正在尝试重定向一些 bash 脚本输出。我想做的是: ./some_script.sh 2> error.log >> all_output.log 2>&1 我想将 stderr 放在一个文件中,
我想将 stdout 和 stderr 的输出重定向到一个公共(public)文件: ./foo.sh >stdout_and_stderr.txt 2>&1 但也只是将 stderr 重定向到一个单
我想运行几个命令,并将所有输出捕获到日志文件中。我还想将任何错误打印到屏幕上(或者可以选择将输出邮寄给某人)。 这是一个例子。以下命令将运行三个命令,并将所有输出(STDOUT 和 STDERR)写入
在其他语言中(如 bash 和 Python),当我们生成一个子进程时,这个新进程将从父进程继承 stdout 和 stderr。这意味着子进程的任何输出都将打印到终端以及父进程的输出。 我们如何在
这个问题在这里已经有了答案: IO Redirection - Swapping stdout and stderr (4 个答案) 关闭 7 年前。 我想将应该转到 stdout 的所有内容重定向
我有一个 shell 脚本,我想将其 stdout 和 stderr 写入日志文件。我知道这可以通过 sh script.sh >> both.log 2>&1 但是,我还想同时将 stderr 写入
git clone 将其输出写入 stderr,如记录 here .我可以使用以下命令重定向它: git clone https://myrepo c:\repo 2>&1 但这会将所有输出(包括错误
以下将 stdout 写入日志文件并打印 stderr: bash script.sh >> out.log 这再次将 stdout 和 stderr 写入日志文件: bash script.sh >
我正在调试一个在 PHP 5.4 上使用 Slim 和 NotORM 的项目。将 NotORM 设置为 Debug模式时,NotORM 跟踪语句: fwrite(STDERR, "$backtrace
到目前为止我所做的是: #!/bin/bash exec 2> >(sed 's/^/ERROR= /') var=$( sleep 1 ; hostname ;
我在远程机器上通过 SSH 执行一系列操作,我正在传输它的标准输出和标准错误,然后由写入器使用它,写入本地标准输出和标准错误,以及字节缓冲区。 就在编写器使用它之前,我想对其执行一系列字符串操作,然后
现在我有一些使用 Popen.communicate() 的代码从子进程(设置 stdin=PIPE 和 stderr=PIPE)运行命令并捕获 stderr 和 stdout。 问题在于 commu
我是一名优秀的程序员,十分优秀!