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)
- dlaczego otrzymujemy 0 zamiast 7.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()
lubsubprocess.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.