获取正在运行的子进程输出的第一行

时间:2019-07-16 13:08:15

标签: javascript node.js

我正在尝试将Serveo命令中生成的URL保存到变量中。 我的代码可以工作,但是一旦我访问生成的链接,一些输出就会添加到标准输出中,然后我的变量就会更改。

let ls = cp.spawn("ssh", ["-R", "80:localhost:4200", "serveo.net"]);
new Promise(function(resolve, reject) {
  ls.stdout.on("data", async function(data) {
    shellinabox.Localtunnel.URL = await data
      .toString()
      .split(" ")[3]
      .replace("\n", "");
    resolve(shellinabox);
  });
});

首先,我的代码为我提供了链接 例如:https://justanexample.serveo.net 然后,一旦我转到链接,我的变量将更改为“ to”,这是新标准输出中的第四个单词...

1 个答案:

答案 0 :(得分:0)

我没有找出如何始终获得stdout的第一行,但最终在检查stdout之前检查变量是否为空,最终没有使问题复杂化

let serveo = cp.spawn("ssh", ["-R", "80:localhost:4200", "serveo.net"]);
shellinabox.Serveo.PID = serveo.pid;
new Promise(function(resolve, reject) {
  serveo.stdout.on("data", async function(data) {
    if (shellinabox.Serveo.URL == null) {
      shellinabox.Serveo.URL = await data
        .toString()
        .split(" ")[4]
        .replace(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g, "")
        .replace("\r", "")
        .replace("\n", "");
      resolve(shellinabox);
    }
  });
});