【发布时间】:2018-11-21 07:12:36
【问题描述】:
const p = spawn('ls', ['/'])
console.log('$mark$')
p.stdout.pipe(process.stdout)
以上代码准确打印了根目录的文件列表,即:
$mark$
bin
boot
data
dev
etc
home
lib
lib64
lost+found
media
mnt
opt
proc
root
run
sbin
solr.log
srv
sys
tmp
usr
var
但是,如果我等待片刻,例如 1 秒,它不会打印任何内容。代码如下:
const p = spawn('ls')
setTimeout(() => {
console.log('$mark$')
p.stdout.pipe(process.stdout)
}, 1000)
只打印:
$mark$
我想知道为什么第二个代码不打印ls命令的任何内容。
环境:
- Linux:openSUSE Leap 42.3
- 节点:v8.11.1
【问题讨论】:
-
我想这是完整的清单。现在想想这个。它“关闭”了吗?或者管道在进程退出之前根本就没有发生过?想一想。
-
当您通过管道传输标准输出以处理
ls命令时,该命令已完成,因此无需打印任何内容。 没有什么奇怪的。 -
@Molda 那么如何在一段时间后捕获流?
-
如果生成的进程稍后返回更多数据,它应该可以正常工作。
ls命令立即返回数据并退出。 -
@Molda 更多数据不起作用,这只是一个最简单的演示案例。我有一个命令大约几秒钟,但它必须等待另一个任务才能捕获命令的输出。