【问题标题】:Executing a shell script, printing output as it happens, and blocking until it's done?执行一个 shell 脚本,在它发生时打印输出,然后阻塞直到它完成?
【发布时间】:2020-05-01 00:54:37
【问题描述】:

我有一个用 JS 编写的脚本,它在 Node 中执行(不是网站,不是电子应用程序;只是在终端中 node myscript.js。该脚本的一部分是顺序执行一系列其他(shell)脚本,并且打印这些脚本的输出。

我尝试了两种方法:

const execSync = require('child_process').execSync;

for (const argItemin list) {
  console.log(execSync('myscript.bat ' + argItem, {encoding: 'utf-8'}));
}
const exec = require('child_process').exec;

for (const argItem in list) {
  const execution = exec('myscript.bat ' + argItem);
  execution.stdout.on('data', function (data) { console.log(data); });
}

第一种方法同步执行并打印所有内容,但在每个myscript.bat 执行完成后写入输出,而不是在myscript.bat 打印输出时写入。

第二种方法在事情发生时打印它们,但是因为在每次执行完成之前没有任何阻塞,所以输出是一团糟。

如何在脚本完成执行之前阻止第二种方法的子进程,以获得两全其美的效果?谢谢!

【问题讨论】:

    标签: javascript node.js


    【解决方案1】:

    原来我想要

    const execSync = require('child_process').execSync;
    
    for (const argItemin list) {
      console.log(execSync('myscript.bat ' + argItem, {stdio: 'inherit'}));
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多