0

我需要用 python 运行一些 bash 脚本并显示输出。其中一些脚本包含一些pv命令,但subprocess我无法获得pv输出。

import subprocess as sp

p = sp.Popen(["./script.sh"], shell=False, bufsize=1, stdout=sp.PIPE, stderr=sp.STDOUT, universal_newlines=True)

p.wait()

print(p.returncode)
print(p.stdout.read())
#!/bin/bash

set -e

echo "aaa"
echo "bbb" >&2

pv -L 1000 -F "%t %b %r %e" /path/to/some/file | cat > /tmp/foo

运行这个 python 脚本我只是得到了echo输出:

$ python script.py 
0
aaa
bbb

4

1 回答 1

1

pv对它是否在终端中运行很敏感。如果要捕获其输出,请使用该pv -f选项强制它显示进度指示器,即使它未连接到终端也是如此。

对于更复杂的场景,您可能必须使用类似pty在终端下模拟运行的东西。

(当然,最好使用原生 Python 进度条,例如tqdm.)

于 2021-12-15T12:46:43.800 回答