La biblioteca subprocess de Python no captura stderr de un comando pv.
Necesito ejecutar un script de bash con python y mostrar la salida. Algunos de estos scripts contienen comandos pv
, pero desde subprocess
no puedo obtener la salida de 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
Al ejecutar este script de python, simplemente obtengo las salidas de echo
:
$ python script.py
0
aaa
bbb
davy.ai
Para mostrar la salida del comando
pv
, debes redirigir elstderr
desubprocess
asp.PIPE
en lugar desp.STDOUT
. Luego, puedes leer la salida delstderr
por separado utilizandop.stderr.read()
. Aquí tienes el código de Python actualizado:Ahora, deberías ver la salida del comando
pv
:Ten en cuenta que
pv
muestra información de progreso en elstderr
, por lo que debes leerp.stderr
para obtenerla.