python + hvordan man udskriver værdi, der kommer fra os.system

hvorfor dette enkle python-script ikke udskriver den rigtige redhat-version?

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

når jeg kører det

fik vi:

7.2 ("my version is ", 0) 
  1. hvorfor vi får 0 i stedet for 7.2?
  2. hvordan undgår man at få version – 7.2 fra os.system?

Kommentarer

  • Python2 eller Python3?
  • Skal dette flyttes til SO?

Svar

os.system() kører bare processen , det fanger ikke output:

Hvis kommandoen genererer et output, sendes det til tolkens standardoutputstrøm.

Returværdien er procesens udgangskode:

På Unix er returværdien afslutningsstatus for processen kodet i det format, der er angivet til ventetid ().

Du skal bruge noget som subprocess.check_output() eller subprocess.Popen() direkte for at opfange output.

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

Kommentarer

  • ok, men hvordan man kun fanger x86_64 uden " \ n "?
  • @janga til ovenstående eksempel , brug arch [: – 1]?
  • ok, virker, et andet sidste spørgsmål, hvordan man undgår udskrivning fra os.system, for eksempel os.system (' sed -is " /7.0/$new_version/g" / tmp / file), det udskriver den streng, som vi vil erstatte
  • For at strippe den nye linje skal du bruge .rstrip()
  • kan du vise mig venligst al syntaksen?

Svar

Du kan bruge subprocess -modul og opnå dette ret nemt.

#!/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()) 

Også til awk del, du kan bruge sed "s/[^0-9_.-]//g /etc/redhat-release. Dette udtager kun versionsnummeret og behøver ikke at vide, hvilket feltversionsnummer der er, hvilket gør det mere platformuafhængigt.

Kommentarer

  • er denne variabel – version – er uden " \ n ", fordi jeg vil bruge denne variabel senere i sed-kommandoen inde i pythonen
  • Jeg får ikke ' ikke dit spørgsmål. Uanset hvad du laver, ser ' ikke ud til at give mening.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *