Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在node.js中获取实时生成的childProcess.stdout_Javascript_Node.js_Child Process - Fatal编程技术网

Javascript 如何在node.js中获取实时生成的childProcess.stdout

Javascript 如何在node.js中获取实时生成的childProcess.stdout,javascript,node.js,child-process,Javascript,Node.js,Child Process,我使用Node调用一个命令,该命令有时返回一个交互式shell提示符。我正在使用ChildProcess.spawn创建子流程 下面是我的node.js代码: let ps = ChildProcess.spawn('command', ['arg1', 'arg2'], { interactive: true }) ps.stdout.on('data', data => { console.log('GOT SOME DATA:', data.toString()) }) ps

我使用Node调用一个命令,该命令有时返回一个交互式shell提示符。我正在使用
ChildProcess.spawn
创建子流程

下面是我的node.js代码:

let ps = ChildProcess.spawn('command', ['arg1', 'arg2'], { interactive: true })

ps.stdout.on('data', data => {
  console.log('GOT SOME DATA:', data.toString())
})

ps.stderr.on('data', data => {
  console.log('ERROR:', data.toString())
})
我的脚本有时会有一个交互式提示,如:

Enter Password:
我希望能够侦听此文本(类似于
if(line.match(/^Enter Password:/){…}
,然后写入stdin,但是
ps.stdout.on('data',…)
直到进程退出才会被调用

如何刷新进程的stdout流并立即获取数据(甚至轮询数据)


注意:我也尝试了
pty.js
,但运气不好,它似乎完全停滞了。

您的代码工作正常,我只是接收了一个缓冲区而不是字符串,请尝试使用字符串插值:

let ps = ChildProcess.spawn('ls', [], { interactive: true})

ps.stdout.on('data', data => {
  console.log(`Got some data : ${data}`)
})

ps.stderr.on('data', data => {
  console.log(`Got some error : ${data}`)
})

您的代码运行良好,我只是接收了一个缓冲区而不是字符串,请尝试使用字符串插值:

let ps = ChildProcess.spawn('ls', [], { interactive: true})

ps.stdout.on('data', data => {
  console.log(`Got some data : ${data}`)
})

ps.stderr.on('data', data => {
  console.log(`Got some error : ${data}`)
})

你说得对,我忘了添加
toString()
(或插值)。但这不是问题。问题是直到命令退出(或达到某个字符限制)才接收数据.Hi Jeremy,如果你能分享更多的代码,我可以帮助你,特别是你的“命令”是一个node js脚本?。你可以尝试做的一件事是将stdio设置为“ipc”,这样家长和孩子就可以与ipc通信进行通信。看到这个可以帮助你。你是对的,我忘了将
添加到字符串中()
(或插值)。但这不是问题。问题是直到命令退出(或达到某个字符限制)才接收数据.嗨,Jeremy,如果你能分享更多的代码,我可以试着帮助你,特别是你的“命令”是一个节点js脚本?。你可以尝试做的一件事是将stdio设置为“ipc”,这样家长和孩子就能够与ipc通信进行通信。请看这个可以帮助你的。