python + comment afficher la valeur provenant de os.system

pourquoi ce simple script python nimprime pas la vraie version de redhat?

version = os.system( " cat /etc/redhat-release | awk \"{print $7}\" " ) print ("my version is " ,version) 

quand je lexécute

nous avons:

7.2 ("my version is ", 0) 
  1. pourquoi nous obtenons 0 au lieu de 7.2?
  2. comment éviter dobtenir la version – 7.2 à partir dos.system?

Commentaires

  • Python2 ou Python3?
  • Doit-il être déplacé vers SO?

Réponse

os.system() exécute simplement le processus , il ne « capture pas la sortie:

Si la commande génère une sortie, elle sera envoyée au flux de sortie standard de linterpréteur.

La valeur de retour est le code de sortie du processus:

Sous Unix, la valeur de retour est létat de sortie du processus encodé au format spécifié pour wait ().

Vous » devrez utiliser quelque chose comme subprocess.check_output() ou subprocess.Popen() directement pour capturer la sortie.

>>> arch = subprocess.check_output("uname -a | awk "{print $9}"", shell=True); >>> arch "x86_64\n" 

Commentaires

  • ok, mais comment capturer uniquement le x86_64 sans " \ n "?
  • @janga pour lexemple ci-dessus , utilisez arch [: – 1]?
  • ok, fonctionne, une autre dernière question, comment éviter dimprimer depuis os.system, par exemple os.system (' sed -is " /7.0/$new_version/g" / tmp / file), il affiche la chaîne que nous voulons remplacer
  • Pour supprimer la nouvelle ligne, utilisez .rstrip()
  • pouvez-vous me montrer sil vous plaît toute la syntaxe?

Réponse

Vous pouvez utiliser le module subprocess et y parvenir assez facilement.

#!/usr/bin/python3 import subprocess getVersion = subprocess.Popen("awk "{print $7}" /etc/redhat-release", shell=True, stdout=subprocess.PIPE).stdout version = getVersion.read() print("My version is", version.decode()) 

Aussi pour awk partie, vous pouvez utiliser sed "s/[^0-9_.-]//g /etc/redhat-release. Ceci extraira uniquement le numéro de version et na pas besoin de savoir quel est le numéro de version du champ, ce qui le rend plus indépendant de la plate-forme.

Commentaires

  • est cette variable – version – est sans " \ n ", car je veux utiliser cette variable plus tard dans la commande sed dans le python
  • Je ne ' pas comprendre votre question. Quoi que vous fassiez, ' cela semble logique.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *