繁体   English   中英

Ruby:即使没有换行符也可以获取外部命令的输出

[英]Ruby : get output of external command even when there is no line break

我尝试在Ruby中运行外部命令,然后解析其输出。

 IO.popen(command, :err=>[:child, :out]) {|ls_io|
  ls_io.each do |line| 
   print line   
 end
 }

这种处理方式令人惊奇……除了当我解析一个显示用\\ r向stdout进度的c程序的progress-output时。

只要c程序没有输出\\ n(即只要它没有完成一些长时间的操作),Ruby就会等待并且什么也看不到。 然后,当输出\\ n时,Ruby会看到所有内容

1%\r2%\r3%\r…100%
task finished

我尝试了所有多种方法来调用外部命令(例如, 从Ruby调用shell命令 ); 但似乎没有人捕捉到进展。 我还尝试了每个操作器,例如STDOUT.sync = true ,并且C程序确实调用了fflush(stdout)

我终于找到了一个工作狂。 我做 :

IO.popen(commande, :err=>[:child, :out]) {|ls_io|
while true
  byte=ls_io.read(1)
  if byte.nil?
    break
  end
   print byte
end
}

这很愚蠢……但是有效。

还有其他更优雅的方法,以及更有效的方法吗? 性能很糟糕,好像“刷新率”很慢。

在块之前将输入记录分隔符设置为“ \\ r”(前提是您事先知道):

$/ = "\r"

全局预设变量的参考: http : //www.zenspider.com/Languages/Ruby/QuickRef.html#pre-defined-variables

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM