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)
- pourquoi nous obtenons 0 au lieu de 7.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()
ousubprocess.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.