python + jak wydrukować wartość pochodzącą z os.system

dlaczego ten prosty skrypt Pythona nie drukuje prawdziwej wersji redhat?

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

po uruchomieniu

otrzymaliśmy:

7.2 ("my version is ", 0) 
  1. dlaczego otrzymujemy 0 zamiast 7.2?
  2. jak uniknąć pobrania wersji – 7.2 z os.system?

Komentarze

  • Python2 czy Python3?
  • Czy należy to przenieść do SO?

Odpowiedź

os.system() po prostu uruchamia proces , nie przechwytuje danych wyjściowych:

Jeśli polecenie wygeneruje jakieś wyjście, zostanie ono przesłane do standardowego strumienia wyjściowego interpretera.

Wartość zwracana to kod zakończenia procesu:

W systemie Unix wartość zwracana to kod zakończenia procesu zakodowany w formacie określonym dla wait ().

Będziesz” musiał użyć czegoś takiego jak subprocess.check_output() lub subprocess.Popen() bezpośrednio, aby przechwycić wynik.

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

Komentarze

  • ok, ale jak przechwycić tylko x86_64 bez " \ n "?
  • @janga w powyższym przykładzie użyj arch [: – 1]?
  • ok, działa, kolejne ostatnie pytanie, jak uniknąć drukowania z os.system, na przykład os.system (' sed -is " /7.0/$new_version/g" / tmp / file), wypisuje ciąg, który chcemy zastąpić
  • Aby usunąć znak nowej linii, użyj .rstrip()
  • czy możesz mi pokazać całą składnię?

Odpowiedź

Możesz użyć modułu subprocess i osiągnąć to dość łatwo.

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

Również dla awk, możesz użyć sed "s/[^0-9_.-]//g /etc/redhat-release. Spowoduje to tylko wyodrębnienie numeru wersji i nie trzeba wiedzieć, jaki jest numer wersji pola, co czyni go bardziej niezależnym od platformy.

Komentarze

  • to ta zmienna – wersja – jest bez " \ n ", ponieważ chcę użyć tej zmiennej później w poleceniu sed w pythonie
  • Nie ' nie rozumiem twojego pytania. Cokolwiek robisz, rób ' t wydaje się mieć sens.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *