process.stdin.on('data')接收不到主进程stdin.write传递的值
时间: 2024-02-01 18:16:56 浏览: 104
这种情况可能是因为你的主进程和子进程之间的通信不正确导致的。
首先,确保你在主进程中正确地将数据写入标准输入流中,例如:
```
process.stdin.write('Hello World');
```
然后,在子进程中,你需要监听 `process.stdin` 的 `data` 事件,并从中读取数据。这里有一个简单的示例:
```
process.stdin.on('data', function(data) {
console.log('Received data: ' + data.toString());
});
```
如果你仍然无法接收到数据,那么可能是因为你没有正确地将子进程的标准输入流连接到主进程的标准输出流。你可以使用 `child_process.spawn` 方法来创建子进程,并将 `stdio` 选项设置为 `'inherit'` 来实现这一点:
```
const { spawn } = require('child_process');
const child = spawn('node', ['child.js'], { stdio: 'inherit' });
child.stdin.write('Hello World');
```
这将把子进程的标准输入流连接到主进程的标准输出流,使得你可以在主进程中写入数据,并在子进程中读取到。
相关问题
electron主进程使用spawn/stdin.write子进程使用process.stdin.on('data')监听不到主进程传递的参数
在 Electron 主进程中使用 `spawn` 方法创建子进程时,可以通过 `stdio` 选项来指定子进程的输入/输出方式。默认情况下,子进程的 `stdio` 是 `pipe`,这意味着子进程的输入和输出都会通过管道与主进程进行通信。
如果你要在主进程中向子进程传递参数,可以使用子进程的 `stdin` 对象写入参数,而子进程则可以通过监听 `process.stdin` 事件来读取参数。以下是一个示例代码:
```javascript
// 在主进程中创建子进程
const { spawn } = require('child_process');
const child = spawn('node', ['child.js'], { stdio: ['pipe', 'pipe', 'inherit'] });
// 向子进程写入参数
child.stdin.write('hello');
// 监听子进程的输出
child.stdout.on('data', (data) => {
console.log(`Received data from child: ${data}`);
});
// 在子进程中监听输入
process.stdin.on('data', (data) => {
console.log(`Received data from parent: ${data}`);
});
```
在子进程中,可以通过 `process.stdin` 对象读取来自主进程的参数。同时,在主进程中,我们通过监听 `child.stdout` 事件来获取子进程的输出。
需要注意的是,在上面的代码中,我们将子进程的 `stdio` 设置为 `pipe`,但是将其输出 `inherit`,这意味着子进程的输出将直接输出到主进程的控制台。如果你希望将输出写入文件或者其他处理方式,请根据实际情况修改 `stdio` 选项。
electron+vue中打开一个其他的electron应用并且使用stdin.write传值,但是子进程使用 process. stdin接收不到主进程传递的参数
在 Electron 中,可以通过 `child_process.spawn` 来启动一个新的进程,然后通过 `child.stdin.write` 方法向子进程写入数据。如果子进程无法接收到主进程传递的参数,可能是因为子进程未正确监听 stdin 数据。
你可以尝试在子进程中监听 `process.stdin` 的 `data` 事件,如下所示:
```javascript
// 子进程代码
process.stdin.on('data', data => {
console.log(data.toString())
})
```
在主进程中,可以通过 `child.stdout.on` 监听子进程的标准输出,如下所示:
```javascript
const { spawn } = require('child_process')
const child = spawn('node', ['child.js'])
child.stdout.on('data', data => {
console.log(data.toString())
})
```
你也可以尝试使用 `child_process.exec` 方法来执行子进程,这种方法会自动等待子进程执行完毕后返回输出结果,如下所示:
```javascript
const { exec } = require('child_process')
exec('node child.js 123', (err, stdout, stderr) => {
if (err) {
console.error(err)
} else {
console.log(stdout)
}
})
```
其中,`child.js` 是子进程的代码文件,`123` 是传递给子进程的参数。在子进程中,可以通过 `process.argv` 来获取传递的参数。
阅读全文