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)
- waarom krijgen we 0 in plaats van 7.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()
ofsubprocess.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.