python + hoe waarde af te drukken die afkomstig is van os.system

waarom drukt dit eenvoudige python-script niet de echte redhat-versie af?

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

toen ik het uitvoerde

kregen we:

7.2 ("my version is ", 0) 
  1. waarom krijgen we 0 in plaats van 7.2?
  2. hoe te vermijden om versie 7.2 van os.system te krijgen?

Reacties

  • Python2 of Python3?
  • Moet dit naar SO worden verplaatst?

Antwoord

os.system() voert gewoon het proces uit , het “legt de uitvoer niet vast:

Als het commando uitvoer genereert, wordt het naar de standaard uitvoerstroom van de interpreter gestuurd.

De geretourneerde waarde is de exitcode van het proces:

Op Unix is de retourwaarde de exitstatus van het proces, gecodeerd in het formaat dat is opgegeven voor wait ().

U” zult iets moeten gebruiken als subprocess.check_output() of subprocess.Popen() om de uitvoer rechtstreeks vast te leggen.

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

Reacties

  • ok, maar hoe vang je alleen de x86_64 zonder " \ n "?
  • @janga voor het bovenstaande voorbeeld , gebruik arch [: – 1]?
  • ok, werkt, nog een laatste vraag, hoe kan ik afdrukken vanuit os.system vermijden, bijvoorbeeld os.system (' sed -is " /7.0/$new_version/g" / tmp / file), het drukt de string af die we willen vervangen
  • Om de nieuwe regel te verwijderen, gebruik .rstrip()
  • kun je me alle syntaxis laten zien?

Answer

Je kunt de subprocess module gebruiken en dit vrij eenvoudig bereiken.

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

Ook voor de awk -gedeelte, kunt u sed "s/[^0-9_.-]//g /etc/redhat-release gebruiken. Dit zal alleen het versienummer extraheren en het hoeft niet “te weten welk veldversienummer het is, wat het platformonafhankelijker maakt.

Opmerkingen

  • is deze variabele – versie – is zonder " \ n ", omdat ik deze variabele later wil gebruiken in het sed-commando in de python
  • Ik ' krijg je vraag niet. Wat je ook doet ' lijkt niet logisch.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *