Je veux assigner la sortie d'une commande que je lance en utilisant os.system
à une variable et l'empêcher d'être affichée à l'écran. Mais, dans le code ci-dessous ,la sortie est envoyée à l'écran et la valeur imprimée pour la variable var
est 0, ce qui signifie, je suppose, que la commande s'est exécutée avec succès ou non. Existe-t-il un moyen d'affecter la sortie de la commande à la variable et d'empêcher son affichage à l'écran ?
var = os.system("cat /etc/services")
print var #Prints 0
8 votes
N'utilisez pas
os.system
(nios.popen
(selon la réponse que vous avez acceptée) : utilisersubprocess.Popen
c'est chemin mieux !1 votes
@AlexMartelli, on ne peut pas utiliser une commande complexe (par exemple piped) dans subprocess.Popen(), mais avec os.system on peut
2 votes
@vak, bien sûr vous pouvez utiliser des pipes &c w/
subprocess.Popen
-- ajoutez simplementshell=True
!0 votes
@AlexMartelli
shell=True
est (généralement) une très mauvaise idée ! Vous devez être très sûr de ce que vous exécutez :)4 votes
@AlexMartelli il n'est pas utile de dire que quelque chose est "bien meilleur" sans dire pourquoi.
0 votes
@user650261, comme il est assez évident dès que vous regardez dans os.system, os.popen, et subprocess.Popen, ce dernier vous donne un contrôle beaucoup plus fin. Cela sera clairement "bien meilleur" si vous avez besoin de quelque chose de différent du comportement des approches plus simples, comme le fait évidemment le PO.
0 votes
@IgnacioFernández, os.open et os.popen nécessitent exactement le même degré de certitude sur ce que vous exécutez que subprocess.Popen avec shell=True, donc il n'y a absolument aucune raison d'éviter ce dernier.
1 votes
@AlexMartelli il s'agit de Stack Overflow, où l'objectif est de fournir ce type d'informations aux personnes posant des questions plutôt que de leur dire de rtm. Même maintenant, il n'est pas clair quel contrôle à grain fin est plus utile pour le cas d'OP.