使用Node JS执行Windows Shell命令(Cmd.exe)的方法

25

我希望你能够

C:\>ACommandThatGetsData > save.txt

不过,我希望能用Node.JS执行上述命令,而非在控制台解析并保存数据。

如何使用Node.JS执行shell命令?


可能是重复的问题:node.js shell command execution - Mike Pennington
可能是在Node.js中获取shell命令的输出的重复问题。 - Damjan Pavlica
3个回答

17
使用process.execPath()
process.execPath('/path/to/executable');

更新

我应该更好地阅读文档。

有一个子进程模块(Child Process Module)可允许执行子进程。你将需要使用child_process.execchild_process.execFilechild_process.spawn中的一个。它们的使用方法都类似,但每个模块各有优点。哪个模块要使用取决于您的需求。


13
你也可以尝试使用node-cmd包。
const nodeCmd = require('node-cmd');
nodeCmd.get('dir', (err, data, stderr) => console.log(data));

在较新的软件包版本中,语法稍有变化:
const nodeCmd = require('node-cmd');
nodeCmd.run('dir', (err, data, stderr) => console.log(data));

它不直接支持Promises,但你可以轻松地将它们包装在一个里面:
const nodeCmd = require('node-cmd');
const promise = new Promise((resolve, reject) => {
    nodeCmd.run('dir', (err, data, stderr) => {
        if (err) {
            reject(err);
        } else {
            resolve(data, stderr);
        }
    });
});

1
这解决了我遇到的难题!谢谢 :) - Adam Marsh
2
get函数在新版本中未定义。可以在此处找到新的示例:https://www.npmjs.com/package/node-cmd - AmirHossein Rezaei
1
node-cmd模块内部仅使用child_process => (https://github.com/RIAEvangelist/node-cmd) - Devanand Sharma
我能在使用await和promises时使用这个吗?谢谢。 - Ahmed Can Unbay
不确定它是否直接支持 Promise,但即使不支持,您也可以始终将其包装在一个 Promise 中;如果 err 是非假值,您将调用 reject(err);否则,您将调用 resolve(data)。请参见 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise 以了解如何使用 resolvereject 实现 Promise。 - Haroldo_OK

4

我知道这个问题已经很久了,但是它帮助我使用promise找到了解决方案。 还可以参考:这个问题和答案

const util = require('util');
const exec = util.promisify(require('child_process').exec);

async function runCommand(command) {
  const { stdout, stderr, error } = await exec(command);
  if(stderr){console.error('stderr:', stderr);}
  if(error){console.error('error:', error);}
  return stdout;
}


async function myFunction () {
    // your code here building the command you wish to execute ...
    const command = 'dir';
    const result = await runCommand(command);
    console.log("_result", result);
    // your code here processing the result ...
}

// just calling myFunction() here so it runs when the file is loaded
myFunction();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接