【发布时间】:2018-10-17 22:01:16
【问题描述】:
我有以下代码:
const spawn = require("child_process").spawn;
const netStat = spawn('netstat', ['-nat']);
const grepPort = spawn('grep', ['3000']);
const grepStatus = spawn('grep', ['ESTABLISHED']);
console.log('Determining public ip\'s connected to port 3000');
// get port 3000 from netstat
netStat.stdout.on('data', (data) => {
grepPort.stdin.write(data);
});
netStat.on('close', (code) => {
if (code !== 0) {console.log(`netstat process exited with code ${code}`);}
grepPort.stdin.end();
});
// get ESTABLISHED from port 3000
grepPort.stdout.on('data', (data) => {
grepStatus.stdin.write(data);
});
grepPort.on('close', (code) => {
grepStatus.stdin.end();
});
grepStatus.stdout.on('data', (data) => {
console.log(data.toString())
// Store data.toString() to variable here
});
我正在尝试将最终数据捕获到一个字符串中,其中注释位于第三行到最后一行。
我研究了流、缓冲区对象等,但没有任何工作(也许我做错了?)所以我正在寻找一个新的解决方案,或者一个简单的“它不可能”。
编辑: 假设代码被修改:
const spawn = require("child_process").spawn;
var port = 3000
console.log(`Determining public ip\'s connected to port ${port}`);
let output = '';
const proc = spawn('sh', [
'-c',
`netstat -nat | grep ${port}.*ESTABLISHED | awk '{print $5}' | grep -v .*${port}`
]);
proc.stdout.on('data', (chunk) => {
output += chunk.toString();
});
proc.stderr.on('data', (chunk) => {
console.log(chunk.toString());
});
proc.on('error', (err) => {
console.error(err);
});
proc.on('exit', (code) => {
console.log("Done");
});
console.log(output); // Should print output, no?
提前感谢您的帮助!
【问题讨论】:
标签: node.js stream console global-variables stdout