Qual é a diferença entre subprocess.popen e subprocess.run

Sou novo no módulo de subprocess e a ducumentação me deixa imaginando qual é a diferença entre subprocess.popen e subprocess.run . Existe uma diferença no que o comando faz? Um é apenas mais novo? Qual é melhor usar?

subprocess.run foi adicionado no Python 3.5 como uma simplificação sobre subprocess.Popen quando você quer apenas executar um comando e esperar até que ele termine, mas você não quer fazer mais nada enquanto isso. Para outros casos, você ainda precisa usar subprocess.Popen .

A principal diferença é que subprocess.run executa um comando e espera que ele termine, enquanto que com subprocess.Popen você pode continuar fazendo suas coisas enquanto o processo termina e depois repetidamente chamar subprocess.communicate se para passar e receber dados para o seu processo .

Note que, o que o subprocess.run está realmente fazendo é invocar para você o Popen e se communicate , assim você não precisa fazer um loop para passar / receber dados, nem esperar que o processo termine.

Verifique neste site as informações de quais parâmetros do subprocess.run são passados ​​para o Popen e quais communicate .