python + kuinka tulostaa os.systemistä tuleva arvo

miksi tämä yksinkertainen python-komentosarja ei tulosta todellista redhat-versiota?

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

kun suoritan sen

saimme:

7.2 ("my version is ", 0) 
  1. miksi saamme 0 sen sijaan 7,2?
  2. miten vältetään version 7.2 saaminen os.systemistä?

Kommentit

  • Python2 tai Python3?
  • Pitäisikö tämä siirtää SO: han?

Vastaa

os.system() vain suorittaa prosessin , se ei sieppaa tulosta:

Jos komento tuottaa jonkin lähdön, se lähetetään tulkin vakiolähtövirtaan.

Paluuarvo on prosessin poistumiskoodi:

Unixissa palautusarvo on prosessin poistumistila, joka on koodattu odotukseen määritetyssä muodossa ().

Sinun on käytettävä jotain esimerkiksi subprocess.check_output() tai subprocess.Popen() suoraan tuloksen sieppaamiseksi.

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

Kommentit

  • ok, mutta kuinka kaapata vain x86_64 ilman " \ n "?
  • @janga edelliseen esimerkkiin , käytä arch [: – 1]?
  • ok, toimii, toinen viimeinen kysymys, miten vältetään tulostaminen os.system-järjestelmästä, esimerkiksi os.system (' sed -is " /7.0/$new_version/g" / tmp / file), tulostaa merkkijonon, jonka haluamme korvata
  • Voit poistaa uuden rivin käyttämällä .rstrip()
  • voitko näyttää minulle kaiken syntaksin?

vastaus

Voit käyttää subprocess -moduulia ja saavuttaa tämän melko helposti.

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

Myös awk -osaa, voit käyttää sed "s/[^0-9_.-]//g /etc/redhat-release. Tämä vain purkaa versionumeron, eikä sen tarvitse tietää, mikä kenttäväylän versionumero on, mikä tekee siitä alustasta riippumattoman.

Kommentit

  • on tämä muuttuja – versio – on ilman " \ n ", koska haluan käyttää tätä muuttujaa myöhemmin sed -komennossa pythonissa
  • En saa ' kyselyäsi. Mitä ikinä teetkin, ei näytä järkevältä.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *