CPU-Informationen

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
iTobi_DerErste
User
Beiträge: 9
Registriert: Dienstag 24. März 2020, 18:01
Kontaktdaten:

Code: Alles auswählen

import time, os
from gpiozero import CPUTemperature

i = 1
cpu_temp = os.system('sudo vcgencmd measure_temp')
cpu_voltage = os.system('/opt/vc/bin/vcgencmd measure_volts')
cpu_tact = os.system('/opt/vc/bin/vcgencmd measure_clock core')

while i == 1:
    print(cpu_temp)
    print(cpu_voltage)
    int(cpu_tact);
    cpu_tact / 1000000;
    print(cpu_tact);
    time.sleep(1);
diesen Python code habe ich geschriben um mir CPU-Informationenn Anzeigen zu lassen.
Die Takt frequenz möchte ich lediglich in Ghz anzeigen lassen.
Die CPU temperatur und Spannung wir allerdings nicht angezeigt.
Außerdem möchte ich mir die CPU-Auslast anzeigen lassen.

Jemand Vorschläge?

LG Tobi
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du musst die Kommandos schon in die Schleife packen, sonst wird darin ja nie ein aktueller Wert ermittelt.
iTobi_DerErste
User
Beiträge: 9
Registriert: Dienstag 24. März 2020, 18:01
Kontaktdaten:

__deets__ hat geschrieben: Dienstag 24. März 2020, 19:07 Du musst die Kommandos schon in die Schleife packen, sonst wird darin ja nie ein aktueller Wert ermittelt.
Das habe ich auch schon versucht.
Und das funktioniert auch relativ gut.
Mein problem ist, dass isch die Frequenz für meinen 4B in GHz anzeigen lassen möchte.
so wie das jetzt ist gibt er mir nur "0" aus.
Außerdem möchte ich mir die CPU-Auslast ebenfalls anzeigen lassen.

LG Tobi
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Deine cpu_tact-Berechnung erfolgt ohne das das Ergebnis irgendetwas zugewiesen wird. Du musst

Code: Alles auswählen

a = b / c
schreiben. Oder du benutzt den /=-Operator, der das dann gleich in einem macht, wenn a und b die gleiche Variable sein sollen

Code: Alles auswählen

a /= c
iTobi_DerErste
User
Beiträge: 9
Registriert: Dienstag 24. März 2020, 18:01
Kontaktdaten:

Ah okay danke. Nur leider gibt er immer noch 0 aus.

Code: Alles auswählen

import time, os, sys

i = 1

while i == 1:
    cpu_temp = os.system('sudo vcgencmd measure_temp')
    cpu_voltage = os.system('sudo vcgencmd measure_volts')
    cpu_tact = os.system('sudo vcgencmd measure_clock core')
    float(cpu_tact)
    cpu_tact_GHz = cpu_tact / 1000000
    print('Taktfrequenz:' + str(cpu_tact_GHz))
    time.sleep(1)
Das Problem mit meiner CPU Auslast...
Hast du dafür vielleicht auch eine Lösung ?? @__deet__
Zuletzt geändert von iTobi_DerErste am Dienstag 24. März 2020, 19:37, insgesamt 2-mal geändert.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Hast du mal gegoogelt? Das muesste ich jetzt naemlich auch tun.
iTobi_DerErste
User
Beiträge: 9
Registriert: Dienstag 24. März 2020, 18:01
Kontaktdaten:

Ja schon mehrfach. nur leider finde ich dazu nichts

Mein vorherigen Kommentar habe ich nocmak nacträglich geändert. wärst du so freundlich und würdest du da noch einmal rübergucken, dass wäre sehr nett.

LG Tobi
iTobi_DerErste
User
Beiträge: 9
Registriert: Dienstag 24. März 2020, 18:01
Kontaktdaten:

Super Danke dir @__deet__
Benutzeravatar
__blackjack__
User
Beiträge: 13938
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@iTobi_DerErste: Noch mal zum ersten Code: Der tut nicht was Du glaubst was der tut weil `os.system()` etwas anderes zurück gibt als Du anscheinend denkst. Was das ist, solltest Du mal in der Dokumentation nachlesen. Da steht dann auch der Hinweis das `os.system()` nicht verwendet werden sollte, und was man stattdessen verwendet wenn man externe Programme ausführen möchte.
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
iTobi_DerErste
User
Beiträge: 9
Registriert: Dienstag 24. März 2020, 18:01
Kontaktdaten:

Meinst du Subprocess.Popen wäre besser?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Jein. subprocess ja, aber dir reicht subprocess.run. Mit entsprechenden Optionen, um die Ausgabe auch zurueck zu bekommen.
iTobi_DerErste
User
Beiträge: 9
Registriert: Dienstag 24. März 2020, 18:01
Kontaktdaten:

Ok Danke. habe das problem mit eurer hilfe doch geklärt. Der psutil Tipp von @__deets__ war Gold wert.

Code: Alles auswählen

import time, psutil

i = 1

while i == 1:
    print('CPU-Usage: ' + str(psutil.cpu_percent(interval=0, percpu=False)) + '%')
    print('CPU-Frequency: ' + str(psutil.cpu_freq()))
    print('Temperatures: ' + str(psutil.sensors_temperatures()))
    time.sleep(2)
Danke an alle die mir geholfen haben

LG Tobi
Benutzeravatar
__blackjack__
User
Beiträge: 13938
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@iTobi_DerErste: Jetzt noch das überflüssige `i` und das zusammenstückeln von Zeichenketten und Werten mit ``+`` und `str()` raus:

Code: Alles auswählen

#!/usr/bin/env python3
import time

import psutil


def main():
    while True:
        print("CPU-Usage: {}%".format(psutil.cpu_percent()))
        print("CPU-Frequency: {}".format(psutil.cpu_freq()))
        print("Temperatures: {}".format(psutil.sensors_temperatures()))
        time.sleep(2)


if __name__ == "__main__":
    main()
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
iTobi_DerErste
User
Beiträge: 9
Registriert: Dienstag 24. März 2020, 18:01
Kontaktdaten:

Danke @__blackjack__
Aber ich denke mal ich lass das so wie ich das jetzt habe. Das ist für mich am einfachsten.

Code: Alles auswählen

import time, psutil
from gpiozero import CPUTemperature

i = 1

while i == 1:
    print('CPU-Usage: ' + str(psutil.cpu_percent(interval=0, percpu=False)) + '%')
    print('CPU-Tact: ' + str(psutil.cpu_freq()[0]) + ' MHz')
    cpu_temp = CPUTemperature()
    print('CPU-Temperature: ' + str(cpu_temp.temperature) + '*C')
    print('RAM-Usage: ' + str(psutil.virtual_memory()[2]) + '%')
    print('---------------------------------------------------------------')
    time.sleep(1.5)
Benutzeravatar
__blackjack__
User
Beiträge: 13938
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Ist dann halt nicht wirklich Python, sondern eher BASIC. Und das mit dem ``i = 1`` und ``while i == 1:`` ist unnötig umständlich.
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
Antworten