python + jak tisknout hodnotu, která pochází z os.system

proč tento jednoduchý skript v pythonu nevytiskne skutečnou verzi redhat?

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

když to spustím

dostali jsme:

7.2 ("my version is ", 0) 
  1. proč dostaneme 0 místo 7.2?
  2. jak se vyhnout získání verze – 7.2 z os.system?

komentáře

  • Python2 nebo Python3?
  • Mělo by to být přesunuto do SO?

Odpovědět

os.system() právě spustí proces , nezachytí výstup:

Pokud příkaz generuje jakýkoli výstup, bude odeslán do standardního výstupního proudu tlumočníka.

Návratová hodnota je kód ukončení procesu:

V systému Unix je návratovou hodnotou stav ukončení procesu zakódovaný ve formátu určeném pro wait ().

Budete muset použít něco jako subprocess.check_output() nebo subprocess.Popen() přímo k zachycení výstupu.

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

Komentáře

  • ok, ale jak zachytit pouze x86_64 bez " \ n "?
  • @janga pro výše uvedený příklad , použít arch [: – 1]?
  • ok, funguje, další poslední otázka, jak se vyhnout tisku z os.system, například os.system (' sed -is " /7.0/$new_version/g" / tmp / file), vytiskne řetězec, který chceme nahradit
  • Chcete-li odstranit nový řádek, použijte .rstrip()
  • můžete mi prosím ukázat veškerou syntaxi?

Odpověď

Můžete použít modul subprocess a dosáhnout toho celkem snadno.

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

Také pro awk část, můžete použít sed "s/[^0-9_.-]//g /etc/redhat-release. Tím se extrahuje pouze číslo verze a nemusíte vědět, jaké je číslo verze pole, díky čemuž je nezávislejší na platformě.

Komentáře

  • je tato proměnná – verze – je bez " \ n ", protože tuto proměnnou chci použít později v příkazu sed uvnitř pythonu
  • Nedostávám ' tvou otázku. Ať děláš cokoli, zdá se, že ' to nedává smysl.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *