加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – Zenity – 从Handbrake CLI输出进展

发布时间:2020-12-15 22:37:24 所属栏目:安全 来源:网络整理
导读:我的目标是使用zenity –progress创建一个带有HandBrakeCLI输出的gtk进度条.我遇到了一些障碍,我想知道是否有人知道更好的方法,或者可以帮助我解决我目前正在做的事情. 正常输出: HandBrakeCLI -i infile -o outfile --preset=iPad 显示器 Encoding: task 1
我的目标是使用zenity –progress创建一个带有HandBrakeCLI输出的gtk进度条.我遇到了一些障碍,我想知道是否有人知道更好的方法,或者可以帮助我解决我目前正在做的事情.

正常输出:

HandBrakeCLI -i infile -o outfile --preset=iPad

显示器

Encoding: task 1 of 1,11.97 % (72.81 fps,avg 86.78 fps,ETA 00h00m43s)

HandBrake用管道输入tr并削减命令,因此我只有zenity所期望的百分比.

HandBrakeCLI -i infile -o outfile --preset=iPad 2>&1 | tr -s 'r' 'n' | cut -b 24-28

结果我期望:

1.05 
1.06 
1.10 
1.10

但是,输出延迟很多,有时甚至不会显示.如果我只使用我的tr表达式,我会在每一行上面得到输出,但它是整个输出,包括“编码:任务……”.

这就像cut命令无法跟上Handbrake的标准.我读到了使用命名管道,创建了一个并将HandBrake的输出定向到管道,然后在另一个终端通过管道尝试了tr和cut命令,它导致相同的延迟.

使用awk的print子字符串也会导致相同的延迟.

我无法弄清楚.我正在使用zenity –progress指标,因为我的HandBrake作业被称为MythTV工作,我想要一个进度条弹出,所以我知道什么时候和编码正在进行中.

解决方法

您可以使用已解答的解决方案 here on stackexchange.

例如:

stdbuf程序是GNU coreutils的一部分.

stdbuf -i0 -o0 -e0 command

另一个例子是expect命令unbuffer,例如,

unbuffer long_running_command | print_progress

unbuffer通过伪终端(pty)连接到long_running_command,这使得系统将其视为交互式进程,因此不会在管道中使用可能导致延迟的4-kiB缓冲.

对于较长的管道,您可能必须取消缓冲每个命令(最后一个命令除外),

unbuffer x | unbuffer -p y | z

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读