¿Cuál es la diferencia entre subprocess.popen y subprocess.run

Soy nuevo en el módulo de subprocess y la documentación me deja preguntándome cuál es la diferencia entre subprocess.popen y subprocess.run . ¿Hay alguna diferencia en lo que hace el comando? ¿Es uno más nuevo? ¿Cuál es mejor usar?

subprocess.run se agregó en Python 3.5 como una simplificación sobre subprocess.Popen cuando solo desea ejecutar un comando y esperar hasta que termine, pero no quiere hacer nada más mientras tanto. Para otros casos, aún necesita usar subprocess.Popen .

La principal diferencia es que subprocess.run ejecuta un comando y espera a que finalice, mientras que con subprocess.Popen puede continuar haciendo sus cosas mientras el proceso finaliza y luego llamar repetidamente a subprocess.communicate para pasar y recibir datos de su proceso. .

Tenga en cuenta que lo que subprocess.run está haciendo es invocar Popen y communicate , por lo que no necesita hacer un bucle para pasar / recibir datos ni esperar a que finalice el proceso.

Consulte este sitio para obtener información sobre qué parámetros de subprocess.run se pasan a Popen y cuáles se communicate .