【问题标题】:Open Terminal and execute CLI commands via JS / NodeJS打开终端并通过 JS / NodeJS 执行 CLI 命令
【发布时间】:2019-05-04 23:41:40
【问题描述】:

是否有任何方式/代码 sn-p 可以通过 JavaScript / Node.js 或任何基于 UI 的语言打开 Ubuntu 终端并执行终端命令?

【问题讨论】:

  • 能否详细说明您的要求?你的意思是从 JavaScript 中,是否有打开终端窗口的命令?或者有没有办法——从任何语言——打开一个终端窗口?或者您的意思是运行 shell 命令,而不必打开终端窗口?从 Node.js 或其他可以访问 OS 进程的程序,答案是肯定的。从浏览器中的 JavaScript 来看,答案是否定的。
  • 所以我需要构建一个 UI 并基于 UI 输入参数,我需要运行我需要执行基于终端的命令/shell 命令。有没有办法实现它?
  • 是的:你可以从 Node JS 调用 shell 命令 answer hereanother here。基本思路是打开一个新进程并在其中运行一个命令。
  • 感谢参考

标签: javascript node.js user-interface ubuntu terminal


【解决方案1】:

看看这个节点模块。

https://github.com/shelljs/shelljs#examples

【讨论】:

    【解决方案2】:

    您可以通过 childProcess native API 运行 nodeJs 中的任何 shell 命令

    var { exec } = require('child_process'); // native in nodeJs
    
    const childProcess = exec('git pull');
    

    最好使用这个 sn-p

    我经常有一堆 cli 命令要处理,所以我创建了这个简单的助手。它处理错误、退出并可以在您的脚本中等待以匹配不同的场景

    async function execWaitForOutput(command, execOptions = {}) {
        return new Promise((resolve, reject) => {
            const childProcess = exec('git pull', execOptions);
    
            // stream process output to console
            childProcess.stderr.on('data', data => console.error(data));
            childProcess.stdout.on('data', data => console.log(data));
            // handle exit
            childProcess.on('exit', () => resolve());
            childProcess.on('close', () => resolve());
            // handle errors
            childProcess.on('error', error => reject(error));
        })
    }
    

    我可以这样使用:

    await execWaitForOutput('git pull');
    // then
    await execWaitForOutput('git pull origin master');
    // ...etc
    

    【讨论】:

    • 你好,有什么办法可以在第一个命令之后发送另一个命令吗?
    【解决方案3】:

    您可以使用此模块 - OpenTerm。它以跨平台方式打开新的虚拟终端并执行命令:

    const { VTexec } = require('open-term')
    VTexec('help') // Runs "help" command.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-10
      • 1970-01-01
      • 2020-05-14
      • 1970-01-01
      • 2016-10-09
      • 1970-01-01
      • 2015-11-04
      • 2018-02-03
      相关资源
      最近更新 更多