在Ruby中捕获流式标准输出和标准错误

戈斯瓦米

我想在ruby中运行一个shell脚本,该脚本在不退出的情况下产生一些输出,一个简单的例子是:

o = IO.popen(%Q[ while : ; do echo hi ; sleep 0.1 ; done ]).read
p o

如您所见,shell脚本包含一个while循环,该循环一直持续到被杀死为止。echo hi同时与while循环链产生无穷标准输出。

我希望Ruby"hi\n"只要运行Shell脚本就可以读取echo生成的流输出并显示给标准输出。


以perl为例:

open (IN, "while : ; do echo hi ; sleep 0.1 ; done |") ;
my $i = 0 ;

while (<IN>) {
    print($i++ . ' - ' . $_) ;
}

输出:

$ perl p.pl -W
0 - hi
1 - hi
2 - hi
3 - hi
4 - hi
5 - hi
6 - hi
7 - hi
8 - hi
9 - hi
10 - hi
11 - hi
12 - hi
13 - hi
...
...
...

该perl脚本正确显示了流输出,并在前面加上了variable的值$i有没有办法在Ruby中做同样的事情?

斯特凡

您在Ruby中的循环:

io = IO.popen(%Q[ while : ; do echo hi ; sleep 0.1 ; done ])
i = 0

while io.gets
  puts "#{i} - #{$_}"
  i += 1
end

或更惯用:

IO.popen(%Q[ while : ; do echo hi ; sleep 0.1 ; done ]) do |io|
  io.each_line.with_index do |line, i|
    puts "#{i} - #{line}"
  end
end

您可能需要$stdout.sync = true在将脚本输出传递到另一个进程时进行设置(Ruby在不写入TTY时缓冲输出)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何访问Ruby中方法的标准输出和标准错误?

来自分类Dev

显示和捕获标准输出

来自分类Dev

如何从标准输出和标准错误中删除^ M

来自分类Dev

Java从单独的进程中获取标准输出和标准错误

来自分类Dev

重击:抑制标准输出,捕获错误输出

来自分类Dev

如何在变量和管道标准输出中捕获stderr

来自分类Dev

丢弃标准输出和错误

来自分类Dev

glm 输出中的标准错误

来自分类Dev

在TCL catch命令中捕获标准输出

来自分类Dev

subprocess.Popen处理标准输出和标准错误

来自分类Dev

为“docker run”分离标准输出和标准错误?

来自分类Dev

如何从Expect脚本中捕获标准错误

来自分类Dev

同时生成标准错误和输出的命令

来自分类Dev

QTextEdit小部件中的标准输出重复,标准错误

来自分类Dev

在 bash 脚本中重定向标准输入和标准输出

来自分类Dev

如何(临时)捕获标准输出

来自分类Dev

如何在Shell脚本中获取Java应用程序的退出状态,标准输出和标准错误流?

来自分类Dev

重定向标准错误并保留标准输出

来自分类Dev

重定向标准输入和标准输出

来自分类Dev

重定向标准输入和标准输出?

来自分类Dev

阅读并打印“标准输入和标准输出”

来自分类Dev

FE回归中的Driscoll和Kraay标准错误:在R中重现Stata xtscc输出

来自分类Dev

重定向标准输出和错误时,附加作品不带>>

来自分类Dev

使用Apache Commons Exec时如何分别收集标准输出和标准错误?

来自分类Dev

SLURM显示未完成作业的标准输出和标准错误

来自分类Dev

haskell System.Process.createProcess重定向标准输出和标准错误

来自分类Dev

脚本写入标准输出和标准错误时如何防止Cron电子邮件

来自分类Dev

SLURM显示未完成作业的标准输出和标准错误

来自分类Dev

重定向标准输出和标准错误,以及发送到后台的别名

Related 相关文章

  1. 1

    如何访问Ruby中方法的标准输出和标准错误?

  2. 2

    显示和捕获标准输出

  3. 3

    如何从标准输出和标准错误中删除^ M

  4. 4

    Java从单独的进程中获取标准输出和标准错误

  5. 5

    重击:抑制标准输出,捕获错误输出

  6. 6

    如何在变量和管道标准输出中捕获stderr

  7. 7

    丢弃标准输出和错误

  8. 8

    glm 输出中的标准错误

  9. 9

    在TCL catch命令中捕获标准输出

  10. 10

    subprocess.Popen处理标准输出和标准错误

  11. 11

    为“docker run”分离标准输出和标准错误?

  12. 12

    如何从Expect脚本中捕获标准错误

  13. 13

    同时生成标准错误和输出的命令

  14. 14

    QTextEdit小部件中的标准输出重复,标准错误

  15. 15

    在 bash 脚本中重定向标准输入和标准输出

  16. 16

    如何(临时)捕获标准输出

  17. 17

    如何在Shell脚本中获取Java应用程序的退出状态,标准输出和标准错误流?

  18. 18

    重定向标准错误并保留标准输出

  19. 19

    重定向标准输入和标准输出

  20. 20

    重定向标准输入和标准输出?

  21. 21

    阅读并打印“标准输入和标准输出”

  22. 22

    FE回归中的Driscoll和Kraay标准错误:在R中重现Stata xtscc输出

  23. 23

    重定向标准输出和错误时,附加作品不带>>

  24. 24

    使用Apache Commons Exec时如何分别收集标准输出和标准错误?

  25. 25

    SLURM显示未完成作业的标准输出和标准错误

  26. 26

    haskell System.Process.createProcess重定向标准输出和标准错误

  27. 27

    脚本写入标准输出和标准错误时如何防止Cron电子邮件

  28. 28

    SLURM显示未完成作业的标准输出和标准错误

  29. 29

    重定向标准输出和标准错误,以及发送到后台的别名

热门标签

归档