web-dev-qa-db-fra.com

Quelle est la différence entre subprocess.call et subprocess.run de Python

Cela fait un moment que j'essaie de comprendre quelle est la différence entre subprocess.call et subprocess.run. Je sais que le dernier est nouveau sur Python 3.5 et les deux sont basés sur subprocess.Popen, mais je ne comprends pas encore la différence.

26
Andres Orozco

La définition de subprocess.call() mentionne clairement:

Il équivaut à: run(...).returncode (sauf que les entrées et vérifient les paramètres ne sont pas pris en charge)

Comme le dit document de sous-processus de Python 3.5 :

Avant Python 3.5, ces trois fonctions (c'est-à-dire .call(), .check_call(), .check_output()) comprenaient l'API de haut niveau à sous-traiter Vous pouvez maintenant utiliser run() dans de nombreux cas, mais beaucoup de code existant appelle ces fonctions.


Il est courant que lorsque certaines fonctions sont remplacées, elles ne soient pas instantanément obsolètes, mais il existe une fenêtre de prise en charge pour certaines versions. Cela permet d'éviter la rupture de l'ancien code lorsque la version linguistique est mise à niveau. Je ne sais pas si .call() va être remplacé à l'avenir ou non. Mais d'après le document, ce que je sais, c'est qu'ils sont à peu près les mêmes.

25
Moinuddin Quadri