nodejs如何在特定目录运行cmd指令并获取输入输出流
时间: 2023-07-15 20:12:03 浏览: 236
在 Node.js 中,可以使用 `child_process` 模块来执行系统命令,并且可以获取命令的输入输出流。具体的实现步骤如下:
首先,需要引入 `child_process` 模块:
```javascript
const { spawn } = require('child_process');
```
然后,使用 `spawn` 函数来执行系统命令。例如,执行 `dir` 命令:
```javascript
const cmd = spawn('cmd.exe', ['/c', 'dir'], {
cwd: 'D:/Projects',
shell: true
});
```
- `cmd.exe` 表示执行的命令。在 Windows 系统下,需要指定为 cmd.exe。
- `['/c', 'dir']` 表示执行的参数,其中 `/c` 表示执行完命令后自动退出,`dir` 表示要执行的命令。
- `cwd` 表示要执行命令的目录。
- `shell` 表示是否在一个 shell 中执行命令。
接下来,可以监听 `cmd` 对象的 `stdout` 和 `stderr` 事件来获取命令的输出流和错误流。
```javascript
cmd.stdout.on('data', data => {
console.log(data.toString());
});
cmd.stderr.on('data', data => {
console.error(data.toString());
});
```
最后,可以使用 `cmd.stdin.write()` 方法来向命令输入数据。例如,向命令 `ping` 输入一个网址:
```javascript
cmd.stdin.write('ping baidu.com\n');
```
注意:这里的 `\n` 是必须加上的,表示输入完成。
完整的代码示例:
```javascript
const { spawn } = require('child_process');
const cmd = spawn('cmd.exe', ['/c', 'dir'], {
cwd: 'D:/Projects',
shell: true
});
cmd.stdout.on('data', data => {
console.log(data.toString());
});
cmd.stderr.on('data', data => {
console.error(data.toString());
});
cmd.stdin.write('ping baidu.com\n');
```
阅读全文