有没有办法在python中使用pv程序来获取操作的进度?
到目前为止,我有以下内容:
p0 = sp.Popen(["pv", "-f", args.filepath],
bufsize=0,
stdout=sp.PIPE,
stderr=sp.PIPE)
p1 = sp.Popen(["awk", "{print $1, $2, $1, $3, $4 }", "{}".format(args.filepath)],
stdout=sp.PIPE,
stdin=p0.stdout)
但我无法从 p0
获得连续输出。我试过了:
for line in p0.stderr:
print("line:", line)
但这会等待进程完成,然后仅打印来自 pv
的最后一个进度报告。有人知道我怎样才能让它打印不断更新的状态吗?
最佳答案
结果是 pv
输出每一行,末尾有一个回车符 (\r
)。为了能够从输出中连续读取,Popen
需要用 universal_lines=True
进行初始化,像这样:
p0 = sp.Popen(['pv', '-f', args.filepath],
stdout=sp.PIPE,
stderr=sp.PIPE,
universal_newlines=True)
这会导致进度报告的持续输出:
line: 7.12MB 0:00:01 [ 7.1MB/s] [=> ] 8% ETA 0:00:11
line: 14.6MB 0:00:02 [7.42MB/s] [====> ] 16% ETA 0:00:10
line: 22.1MB 0:00:03 [7.55MB/s] [=======> ] 24% ETA 0:00:09
line: 29.5MB 0:00:04 [7.36MB/s] [==========> ] 33% ETA 0:00:08
这是一个类似问题的引用:
关于python - 使用python获取pv的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39274976/