Código fuente para batch_ffmpeg.command

"""
Herramientas para la ejecución de comandos de shell.
"""

import subprocess
import threading

[documentos]def execute(args, stdout_callback=None, stderr_callback=None): """ Ejecuta un comando. Esta función bloquea hasta que el proceso iniciado finalice. Hay callbacks para stdout y stderr. Los callbacks envían como argumento una línea del stream, ya sea stdout o stderr. Los callbacks son llamados apenas hay una nueva línea disponible utilizando *threading*. Args: args (List[str]): Lista con el nombre de programa a ejecutar y sus argumentos. Ej: ``['sudo', 'apt-get', 'install', 'python3']`` stdout_callback (Callable[[str], None]): Función callback para stdout. stderr_callback (Callable[[str], None]): Función callback para stderr. """ p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True) def watch(p, stream): """ Lee un stream perteneciente a un proceso p. Args: p (subprocess.Popen): Proceso a controlar. stream (str): Nombre del stream a controlar, puede ser "stdout" o "stderr". """ if stream == "stdout" and stdout_callback: while p.poll() is None: stdout_callback(p.stdout.readline().rstrip("\n")) if stream == "stderr" and stderr_callback: while p.poll() is None: stderr_callback(p.stderr.readline().rstrip("\n")) t1 = threading.Thread(target=watch, args=(p, "stdout")) t2 = threading.Thread(target=watch, args=(p, "stderr")) t1.start() t2.start() t1.join() t2.join() p.wait()