AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 443539
Accepted
Luc
Luc
Asked: 2018-05-14 03:17:14 +0800 CST2018-05-14 03:17:14 +0800 CST 2018-05-14 03:17:14 +0800 CST

GNU 可以在程序退出之前并行输出标准输出吗?

  • 772
echo 'echo "hello, world!";sleep 3;' | parallel

此命令在完成之前不会输出任何内容。Parallel 的手册页声称:

GNU 并行确保命令的输出与按顺序运行命令时的输出相同。

我猜魔鬼在措辞中:你得到的输出与正常运行它相同,但输出与正常运行它不同。例如,我已经寻找了一个可以执行此操作的选项--results /dev/stdout,但这不起作用。

我的用例是查看我正在运行的命令的实时进度输出。这不是关于已经完成了多少任务,哪些并行可以为我显示,而是关于我想要查看的每个命令的进度输出。

我会使用 bash 循环for i in $x; do cmd & done;(

是否可以并行执行此操作?如果没有,还有其他工具吗?

gnu-parallel
  • 3 3 个回答
  • 9025 Views

3 个回答

  • Voted
  1. Best Answer
    ilkkachu
    2018-05-14T03:25:58+08:002018-05-14T03:25:58+08:00

    我想你正在寻找--ungroup. 手册页说:

    --group  Group output. Output from each jobs is grouped 
             together and is only printed when the command is finished. 
    
             --group is the default. Can be reversed with -u.
    

    -u当然是 的同义词--ungroup。

    • 22
  2. Ole Tange
    2018-05-14T21:41:37+08:002018-05-14T21:41:37+08:00

    要查看一些并行作业的进度,请尝试--tmuxpane --fg:

    parallel --tmuxpane --fg seq {} 10000000 ::: {1..100}
    

    您也可能正在寻找-uor (更有可能) --lb。来自man parallel:

       --line-buffer
       --lb
           Buffer output on line basis. --group will keep the output together
           for a whole job. --ungroup allows output to mixup with half a line
           coming from one job and half a line coming from another job.
           --line-buffer fits between these two: GNU parallel will print a full
           line, but will allow for mixing lines of different jobs.
    
           --line-buffer takes more CPU power than both --group and --ungroup,
           but can be much faster than --group if the CPU is not the limiting
           factor.
    
           Normally --line-buffer does not buffer on disk, and can thus process
           an infinite amount of data, but it will buffer on disk when combined
           with: --keep-order, --results, --compress, and --files. This will
           make it as slow as --group and will limit output to the available
           disk space.
    
           With --keep-order --line-buffer will output lines from the first job
           while it is running, then lines from the second job while that is
           running. It will buffer full lines, but jobs will not mix. Compare:
    
             parallel -j0 'echo {};sleep {};echo {}' ::: 1 3 2 4
             parallel -j0 --lb 'echo {};sleep {};echo {}' ::: 1 3 2 4
             parallel -j0 -k --lb 'echo {};sleep {};echo {}' ::: 1 3 2 4
    
           See also: --group --ungroup
    

    [...]

       --ungroup
       -u  Ungroup output.  Output is printed as soon as possible and by passes
           GNU parallel internal processing. This may cause output from
           different commands to be mixed thus should only be used if you do not
           care about the output. Compare these:
    
             seq 4 | parallel -j0 \
               'sleep {};echo -n start{};sleep {};echo {}end'
             seq 4 | parallel -u -j0 \
               'sleep {};echo -n start{};sleep {};echo {}end'
    
           It also disables --tag. GNU parallel outputs faster with -u. Compare
           the speeds of these:
    
             parallel seq ::: 300000000 >/dev/null
             parallel -u seq ::: 300000000 >/dev/null
             parallel --line-buffer seq ::: 300000000 >/dev/null
    
           Can be reversed with --group.
    
           See also: --line-buffer --group
    

    一个-u闪耀的例子是 stdout 和 stderr 混合在同一行中:

    echo -n 'This is stdout (';echo -n stderr >&2 ; echo ')'
    

    这将使用--lb 和错误地格式化--group。

    但由于进程之间的半行混合,甚至-u不能保证它的格式正确:http: //mywiki.wooledge.org/BashPitfalls#Non-atomic_writes_with_xargs_-P

    • 12
  3. Andrei Popescu
    2020-04-27T13:24:45+08:002020-04-27T13:24:45+08:00

    我的解决方案是将输出记录到文件中,并使用命令实时观察它的变化tail -f <file>,然后在工作完成后自动删除它们。我还发现--progress标志很有用。

    parallel --progress ./program {} '>' {}.log';' rm {}.log ::: A B C
    

    这里的作业将包括program使用不同的输入运行A,并将程序的输出发送到相应的日志文件B。C

    • 5

相关问题

  • 带有文件输入参数的 gnu 并行对参数

  • 使用 GNU Parallel 保持目录有序

  • 为什么 parallel --nice 没有设置 niceness?

  • 计算文件中每一行的 md5sum

  • 我可以在没有 gnu 并行的情况下同时提取我的 git 存储库吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    ssh 无法协商:“找不到匹配的密码”,正在拒绝 cbc

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    如何卸载内核模块“nvidia-drm”?

    • 13 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add 返回:“连接代理时出错:没有这样的文件或目录” 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve