macOs Nodejs通过传递命令来打开终端执行

wqlqzqxt  于 11个月前  发布在  Node.js
关注(0)|答案(1)|浏览(116)

我有以下代码,应该打开一个终端并运行一个命令:

import { ChildProcess, spawn, ChildProcessWithoutNullStreams, ChildProcessByStdio } from 'child_process';
import { Writable, Readable } from 'stream';

const terminal: 
ChildProcessWithoutNullStreams | 
ChildProcessByStdio<Writable, Readable, Readable> |
ChildProcess = spawn('open', ['-b', "com.googlecode.iterm2"]);

terminal.on('spawn', () => {
  console.log("spawn_0")
  if (terminal.stdin) {
    console.log("spawn_1")
    terminal.stdin.write('ls\n');
    terminal.stdin.end();
  }
});

terminal.on('open', () => {
  console.log("open_0")
  if (terminal.stdin) {
    console.log("open_1")
    terminal.stdin.write('ls\n');
    terminal.stdin.end();
  }
});

字符串
当前,当运行此代码时,会在控制台中打印以下内容:

spawn_0
spawn_1


终端正确打开,但“ls”命令未执行

drnojrws

drnojrws1#

试试这个脚本。

import { spawn } from 'child_process';

const terminal = spawn('open', ['-b', 'com.googlecode.iterm2']);

terminal.on('exit', (code, signal) => {
  console.log(`Child process exited with code ${code} and signal ${signal}`);
});

terminal.on('error', (err) => {
  console.error(`Error: ${err.message}`);
});

terminal.stdout?.on('data', (data) => {
  console.log(`stdout: ${data}`);
});

terminal.stderr?.on('data', (data) => {
  console.error(`stderr: ${data}`);
});

terminal.on('close', (code, signal) => {
  console.log(`Child process closed with code ${code} and signal ${signal}`);
});

// Wait for iTerm2 to open before sending the command
setTimeout(() => {
  terminal.stdin?.write('ls\n');
  terminal.stdin?.end();
}, 2000);

字符串
希望对你有帮助。

相关问题