electron+vue中打开一个其他的electron应用并且使用stdin.write传值,但是子进程使用 process. stdin接收不到主进程传递的参数
时间: 2023-11-22 11:56:26 浏览: 58
在 Electron 中,主进程和渲染进程是分离的,它们之间不能直接通信。因此,你需要使用 `ipcMain` 和 `ipcRenderer` 模块来实现进程间通信。
具体来说,你可以在主进程中启动子进程,并将要传递的参数作为命令行参数传递给子进程。然后,在子进程中通过 `process.argv` 获取这些参数。代码示例如下:
在主进程中:
```javascript
const { spawn } = require('child_process')
const { ipcMain } = require('electron')
ipcMain.on('start-subprocess', (event, args) => {
const subprocess = spawn('path/to/subprocess', args)
// 将子进程的输出发送给渲染进程
subprocess.stdout.on('data', data => {
event.sender.send('subprocess-output', data.toString())
})
// 将子进程的错误发送给渲染进程
subprocess.stderr.on('data', data => {
event.sender.send('subprocess-error', data.toString())
})
})
```
在渲染进程中:
```javascript
const { ipcRenderer } = require('electron')
ipcRenderer.send('start-subprocess', ['arg1', 'arg2'])
ipcRenderer.on('subprocess-output', (event, output) => {
console.log(output)
})
ipcRenderer.on('subprocess-error', (event, error) => {
console.error(error)
})
```
在子进程中:
```javascript
process.stdin.setEncoding('utf-8')
process.stdin.on('data', data => {
// 处理从主进程传递过来的参数
})
process.stdin.on('end', () => {
// 子进程退出前的清理工作
})
```
注意,使用 `process.stdin` 读取命令行参数时,必须设置编码格式,否则会得到一个 Buffer 对象。另外,在子进程中,也可以使用 `process.send()` 方法向主进程发送消息。
阅读全文