【问题标题】:GNU parallel loses pv progress outputGNU 并行丢失 pv 进度输出
【发布时间】:2021-03-23 05:39:54
【问题描述】:

如果我使用 GNU Parallel 来包装使用 pv(管道查看器)命令的命令,它会丢失命令的进度输出。

例如,如果我运行以下pv 命令,它会显示我的 gzip 的进度:

› dd if=/dev/urandom bs=256m count=1 | (pv --progress -s 256m --bytes | gzip > /dev/null)
 208MiB [=============================>                                                    ] 32%

...它工作正常。但是,如果我用 GNU 并行包装相同的命令:

parallel 'dd if=/dev/urandom bs={} count=1 | (pv --progress -s {} --bytes | gzip > /dev/null)' ::: 256m

...我不再看到正在进行的 gzip 进度,而只看到最后的最终脚本输出。

问题:不确定是我的pv 还是parallel 有问题,但是如果我使用@,有没有办法显示单个命令(Unix 管道)进度(不是parallel --progress 给出的工作进度) 987654328@?

【问题讨论】:

    标签: pipe gnu-parallel


    【解决方案1】:

    GNU Parallel 将输出保存到临时文件中,当工作完成时,它会打印这些文件。所以它基本上是为每个命令运行这个:

    (cmd; cmd) > tmp.out 2> tmp.err
    cat tmp.out
    cat tmp.err >&2
    

    这就是您看不到任何输出的原因。

    可以要求 GNU Parallel 不使用临时文件,而仅使用 --line-buffer 缓冲整行。这在这里行不通,因为pv 真的想要一个 tty。

    幸运的是,您还可以要求 GNU Parallel 将 tty 连接到 --tty。 GNU Parallel 假设当您连接一个 tty 时,您只想运行一个作业(即--jobs 1),但您可以覆盖它:

    parallel -j2 --tty 'dd  if=/dev/urandom bs=1 count={} | (pv --progress -s {} --bytes | gzip > /dev/null)' ::: 20M 10M
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-20
      • 1970-01-01
      • 1970-01-01
      • 2016-12-23
      • 1970-01-01
      • 2016-11-03
      • 1970-01-01
      相关资源
      最近更新 更多