Seite 1 von 1
Label und os.system
Verfasst: Mittwoch 26. März 2014, 20:52
von mike2707
Hallo Leute,
ich bin Anfänger. Erstmal hallo
Ich versuche eine Systemübersicht zu basteln. Komme jedoch an einer Stelle wo ich nicht mehr weiter weiss.
Vielleicht kann jemand helfen.
Ich möchte die Größe vom Arbeitsspeicher in einem Label anzeigen lassen.
Bis jetzt habe ich.
Code: Alles auswählen
Label(root, text="Größe des Arbeitsspeichers: ").grid(row=6,column=0)
Label(root, text=os.system("cat /proc/meminfo | grep -i MemTotal") ).grid(row=6,column=1)
Das Ergebnis von os.system wird auf der Console ausgeführt, aber nicht in das Label gepackt.
Wie gehe ich am besten vor um an das Ziel zu kommen?
PS: Python3
Besten Gruß
Michael
Re: Label und os.system
Verfasst: Mittwoch 26. März 2014, 21:00
von Sirius3
@mike2707: am besten nimmst Du Pythonmittel um die Datei '/proc/meminfo' zu lesen.
Re: Label und os.system
Verfasst: Mittwoch 26. März 2014, 21:09
von BlackJack
@mike2707: Was Sirius3 gesagt hat.
Ist auch ein Beispiel für „useless use of ``cat``” BTW. Das könnte man auf der Shell ohne ``cat`` und Pipe einfacher ausdrücken als ``grep -i MemTotal /proc/meminfo``.
Wenn das ganze unabhängig vom Betriebssystem sein soll, empfehle ich das `psutil`-Modul:
Code: Alles auswählen
In [19]: psutil.virtual_memory().total / 1024
Out[19]: 4008132L
In [20]: !grep -i MemTotal /proc/meminfo
MemTotal: 4008132 kB
Re: Label und os.system
Verfasst: Mittwoch 26. März 2014, 22:23
von cofi
Und warum das nicht funktioniert hat: `os.system` gibt nicht die Standardausgabe zurueck, sondern den Exitcode des Prozesses.
Fuer dein Anliegen brauchst du `subprocess` und seine Stream-Umleitung.
Aber fuer das Problem an sich haelst du dich besser an Sirius3 und BlackJack.
Re: Label und os.system
Verfasst: Donnerstag 27. März 2014, 09:35
von mike2707
Hallo,
danke für die zahlreichen Antworten.
Werde mir die Tipps von euch ansehen. Man lernt ja nie aus
Gruß
Michael
Re: Label und os.system
Verfasst: Donnerstag 27. März 2014, 23:26
von mike2707
Hallo Leute,
PS: Nicht wundern, habe zuerst die CPU-Infos ausgelesen. Der Arbeitsspeicher ist aber analog dazu.
ich habe mein Problem vorerst mal so gelöst.
Vielleicht nicht best practise, aber für einen anderen Leser vielleicht hilfreich.
Code: Alles auswählen
def cpuinfo():
cpuinfo = open("/proc/cpuinfo")
for c in cpuinfo:
if "model name" in c:
d = c.split(":")
cpuinfo.close()
return(d[1].rstrip() )
Danke nochmal an alle.
Gruß
Mike
Re: Label und os.system
Verfasst: Freitag 28. März 2014, 00:35
von cofi
Ja, da lässt sich noch etwas machen
Code: Alles auswählen
def read_info(path, selector):
with open(path) as info:
for line in info:
if selector in line:
name, content = line.split(':', 1)
return content.rstrip()
def read_cpuinfo():
return read_info('/proc/cpuinfo', 'model name')
def read_meminfo():
return read_info('/proc/meminfo', 'MemTotal')
Mit `with` muss man sich nicht mehr um das manuelle schliessen der Datei kuemmern und das wird sogar im Fehlerfall erledigt.
Re: Label und os.system
Verfasst: Freitag 28. März 2014, 10:42
von mike2707
Danke für die Anregung..
Ist ein Weg sich viel Tiparbeit zu sparen.
Gruß
Mike