如何从ruby获得交互式程序的进度?

如何从ruby获得交互式程序的进度?,ruby,rsync,macruby,Ruby,Rsync,Macruby,我正在尝试创建一个macruby应用程序,它使用--progress参数调用rsync脚本,但是rsync显示其进度的方式是更改同一行,而不是向其输出中添加新行,因此如何获取这些数据 您应该与块表示法一起使用Rsync允许您使用--log format选项更改所显示信息的格式: --log-format=FORMAT This allows you to specify exactly what the rsync client outputs to the user on a pe

我正在尝试创建一个macruby应用程序,它使用--progress参数调用rsync脚本,但是rsync显示其进度的方式是更改同一行,而不是向其输出中添加新行,因此如何获取这些数据

您应该与块表示法一起使用

Rsync允许您使用
--log format
选项更改所显示信息的格式:

--log-format=FORMAT
      This allows you to specify exactly what the rsync client outputs to the user on a per-file basis.  The format is a text string containing embedded
      single-character  escape sequences prefixed with a percent (%) character.  For a list of the possible escape characters, see the "log format" set-
      ting in the rsyncd.conf manpage.  (Note that this option does not affect what a daemon logs to its logfile.)

      Specifying this option will mention each file, dir, etc. that gets updated in a significant way (a transferred file, a  recreated  symlink/device,
      or  a touched directory) unless the itemize-changes escape (%i) is included in the string, in which case the logging of names increases to mention
      any item that is changed in any way (as long as the receiving side is at least 2.6.4).  See the --itemize-changes option for a description of  the
      output of "%i".

      The --verbose option implies a format of "%n%L", but you can use --log-format without --verbose if you like, or you can override the format of its
      per-file output using this option.

      Rsync will output the log-format string prior to a file's transfer unless one of the transfer-statistic escapes is requested, in  which  case  the
      logging  is  done at the end of the file's transfer.  When this late logging is in effect and --progress is also specified, rsync will also output
      the name of the file being transferred prior to its progress information (followed, of course, by the log-format output).
您应该能够动态地将其配置为更有用的功能


另外,如果您使用了
popen3
,您应该能够捕获传输的百分比,并使用它来创建自己的进度条。

问题是rsync写入同一行,我找到了一种方法,基于此,使用IO.popen readpartial来获取部分数据。