【发布时间】:2021-05-22 07:50:47
【问题描述】:
我正在编写一个电子应用程序,需要从命令行执行一个长时间运行的进程并实时监控输出,但我不确定如何实现这个目标。
基本上,如果终端命令打印“找到我!”然后我希望应用程序像处理某种事件一样处理它。
到目前为止,我已经能够做到:
- 用“spawn”从电子启动终端命令
- 使用“console.log”打印终端命令的输出
- 它似乎一直在异步打印 - 这出乎意料但很好。
tsx:以下代码将打印终端命令的输出
import { ChildProcessWithoutNullStreams } from 'child_process';
const sendOutput = (output: ChildProcessWithoutNullStreams | string) =>
{
if (typeof output === 'string') {
console.log(`${output}\n`);
} else {
output.stdout.on('data', (data) => {
console.log(`${data.toString()}\n`);
});
output.stderr.on('data', (data) => {
console.log(`${data.toString()}\n`);
});
}
}
export function helloWorldRepeat(){
let dir = "/Users/les/projects/github/tutorial/les-app/cpp_program";
let cmd = "helloWorldRepeat"
let comm = dir+ "/"+cmd;
let params = [""];
return {
command: `command: ${comm} ${params}`,
process: spawn(comm, params)
}
export function main(){
let c = helloWorldRepeat();
sendOutput(c.process);
}
}
谢谢
【问题讨论】:
-
我认为我们不需要看你的 C++ 代码,而且这个问题不应该被标记为 C++,因为它涉及 Electron 和 shell 之间的交互,而不是 C++ 和 shell 之间的交互。
标签: javascript events electron node-streams