Quelle est la différence entre subprocess.Popen()
et os.system()
?
python
subprocess
system
Arovit
la source
la source
sts = p.wait()
place de la dernière ligne.shell=True
si vous le pouvez. Avoir cette option est l'un des avantages desubprocess.Popen()
et de ses fonctions d'assistance.os.system
etsubprocess.call/popen/run
bloque / attend la fin de la commande: stackoverflow.com/a/14059648/4752883subprocess.Popen()
est un super-ensemble strict deos.system()
.la source
os.system
équivaut à lasystem
commande Unix , alorssubprocess
qu'un module d'aide a été créé pour fournir de nombreuses fonctionnalités fournies par lesPopen
commandes avec une interface plus facile et contrôlable. Ceux-ci ont été conçus de manière similaire à la commande Unix Popen .Tandis que:
Si vous pensez lequel utiliser, utilisez
subprocess
définitivement car vous disposez de toutes les fonctionnalités pour l'exécution, ainsi que d'un contrôle supplémentaire sur le processus.la source
Le sous-processus est basé sur popen2 et, en tant que tel, présente un certain nombre d'avantages - il y a une liste complète dans le PEP ici , mais certains sont:
la source
Lors de l'exécution de python (cpython) sur Windows,
<built-in function system>
os.system s'exécutera sous les rideaux _wsystem tandis que si vous utilisez un système d'exploitation non Windows, il utilisera system .Au contraire, Popen devrait utiliser CreateProcess sur Windows et _posixsubprocess.fork_exec dans les systèmes d'exploitation basés sur Posix .
Cela dit, un conseil important provient de la documentation os.system , qui dit:
la source