Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: python: kom er niet echt uit  (gelezen 10318 keer)

python: kom er niet echt uit
« Gepost op: 2008/03/30, 22:00:53 »
ik zit nu al een hele tijd wat te proberen, maar kom niet tot het gewenste resultaat...dit is wat ik wil doen:

een simpel commando lees ik de temperatuur van men cpu uit, met dit getal moet dit gebeuren:
als getal kleiner is dan 30, dan print "iets"
als getal tussen 30 en 45 is, print dan "iets anders"
als getal boven de 45 is, print "nog iets anders"


nu, het probleem is, hoe laat ik constant dat commando uitvoeren?
en dat groter dan en kleiner dan lukt, maar wat met 'tussen 30 en 45'?

Offline eendje

  • Lid
python: kom er niet echt uit
« Reactie #1 Gepost op: 2008/03/30, 22:17:57 »
import time

#lees temperatuur in variabele CPUtemp

while 1:
    if CPUtemp < 30:
        print 'kleiner dan 30'
    elif (CPUtemp >= 30) & (CPUtemp < 45):
        print 'tussen 30 en 45'
    else:
        print 'groter dan 45'
    time.sleep (1) #1x per seconde
Een dag niets geleerd is een dag niet geleefd!
Ik blog dus ik besta!
__________________________________________________________
Een vraag? Heb je al eens gekeken op: http://wiki.ubuntu-nl.org/FAQ?

Offline Ronnie

  • Lid
    • ronnie.vd.c
python: kom er niet echt uit
« Reactie #2 Gepost op: 2008/03/31, 09:27:30 »
moet #lees temperatuur in variabele CPUtemp ook niet binnen while 1 staan? anders wordt de temp toch alleen maar in het begin uitgelezen?
Ben je ook blij dat Ubuntu zo toegankelijk en gratis is, en wil je graag net als ik iets terugdoen, kijk dan eens rond bij mwanzo, dé poort naar het bijdragen aan Ubuntu en haar gemeenschap!

Documentatie Terminal

python: kom er niet echt uit
« Reactie #3 Gepost op: 2008/03/31, 09:52:47 »
ja, correct ronnie, zo werkt het perfect!

heel erg bedankt ook eendje!

python: kom er niet echt uit
« Reactie #4 Gepost op: 2008/04/01, 09:54:39 »
toch nog even iets vragen...ik heb een checkbox in mijn pogramma gezet, zodra de checkbox word aangevinkt begint de loop en als ik de checkbox uitzet zou de loop moeten stoppen. nu, als ik de checkbox aanzet werkt de loop goed (de terminaloutput klopt), maar mikjn gui blijft hangen, ik moet dan de loop beeindigen in de terminal en dan pas kan ik terug mijn gui gebruiken...zeer vervelend en dus niet de bedoeling. iemand enig idee hoe dit komt?

Offline JvH

  • Lid
python: kom er niet echt uit
« Reactie #5 Gepost op: 2008/04/01, 10:04:30 »
Je zult die loop in een aparte thread moeten uitvoeren. Een thread is in wezen een soort proces, een pad van executie (uitvoering dus, niet de andere betekenis :)). Door 2 threads te gebruiken kun je tegelijkertijd 2 taken uitvoeren in je programma.

Als je 1 thread gebruikt voor je programma, kan het kloppen dat je GUI geblokkeerd wordt. Je programma blijft nl. in de loop zitten, waardoor het dus geen tijd meer vrij heeft voor het afhandelen van user input (de GUI dus).

EDIT:
Hier  is het (Engelstalige) Wikipedia-artikel te vinden over multi-threaded programmeren.
Hier is een voorbeeld te zien van threads in Python.

Waarschuwing: threads vallen wel onder het wat moeilijkere programmeerwerk. Succes ermee!

Offline eendje

  • Lid
python: kom er niet echt uit
« Reactie #6 Gepost op: 2008/04/01, 10:12:50 »
Je kunt toch ook dit doen?

import time

#lees temperatuur in variabele CPUtemp

while 1:
    if vinkje:
        if CPUtemp < 30:
           print 'kleiner dan 30'
        elif (CPUtemp >= 30) & (CPUtemp < 45):
          print 'tussen 30 en 45'
        else:
           print 'groter dan 45'
    time.sleep (1) #1x per seconde
Een dag niets geleerd is een dag niet geleefd!
Ik blog dus ik besta!
__________________________________________________________
Een vraag? Heb je al eens gekeken op: http://wiki.ubuntu-nl.org/FAQ?

python: kom er niet echt uit
« Reactie #7 Gepost op: 2008/04/01, 18:22:39 »
eendje: zo werkt het ook niet, allez, werkt wel, maar blijft gewoon hangen tot ik de loop onderbreek in de terminal...

jvh: ik heb even gekeken en zal er zo snel mogelijk eens mee aan de slag gaan (ben wat veel dingen tegelijk aan het uitproberen).
is dit trouwens de enige of goede manier om zoiets te doen? want er staat: "For many applications, threads are overkill but on some occasions they can be useful. "...

ik zal eens gaan zoeken naar wat voorbeelden van hoe andere programmas dit doen...zoals een sensor applet ofzo...

Offline eendje

  • Lid
python: kom er niet echt uit
« Reactie #8 Gepost op: 2008/04/01, 19:03:46 »
Sorry ik had maar één probleem opgelost nl. die van het vinkje :D. Je kunt er natuurlijk ook een een controle toevoegen of je wilt stoppen, bijv.:

while 1:
    if vinkje:
        if CPUtemp < 30:
           print 'kleiner dan 30'
        elif (CPUtemp >= 30) & (CPUtemp < 45):
          print 'tussen 30 en 45'
        else:
           print 'groter dan 45'
    if stoppen:
        break
    time.sleep (1) #1x per seconde

Met een stopknop zet je dan de variabele stoppen op 1. Misschien niet zo netjes, maar misschien wel iets dat werkt?
Een dag niets geleerd is een dag niet geleefd!
Ik blog dus ik besta!
__________________________________________________________
Een vraag? Heb je al eens gekeken op: http://wiki.ubuntu-nl.org/FAQ?

python: kom er niet echt uit
« Reactie #9 Gepost op: 2008/04/01, 19:33:21 »
nee, zoiets had ik ook al geprobeerd, maar aangezien de gui blijft hangen, kan ik dus ook geen stop-knop gebruiken...

Offline eendje

  • Lid
python: kom er niet echt uit
« Reactie #10 Gepost op: 2008/04/01, 19:52:12 »
Welke grafische toolkit gebruik je? Ik heb een timed event in mij Tkinter programmatje gemaakt volgens de manier zoals in onderstaand voorbeeld programma (werkt alleen met tkinter)

http://www.java2s.com/Code/Python/GUI-Tk/Labelclock.htm


In WxPython bestaat er ook zoiets als een timed event heb ik gelezen, maar ja ik ben ook maar een beginner :D

edit: deze heet Wx.TimerEvent en zit in de Wx.Timer class
Een dag niets geleerd is een dag niet geleefd!
Ik blog dus ik besta!
__________________________________________________________
Een vraag? Heb je al eens gekeken op: http://wiki.ubuntu-nl.org/FAQ?

Offline JvH

  • Lid
python: kom er niet echt uit
« Reactie #11 Gepost op: 2008/04/01, 20:43:54 »
Citaat van: "eendje"
In WxPython bestaat er ook zoiets als een timed event heb ik gelezen
Oh ja dat was ik idd vergeten :)
Net als eendje ben ik niet echt thuis in Python, dus weet niet hoe het daar zit. Maar in talen als Java en Delphi heb je een Timer-component. Dat is als het ware een soort klokje dat met een interval van een door jou ingesteld aantal milliseconden een event afvuurt. Daar kun je dan in je programma op reageren in een event handler, in jouw geval door de temperatuur van je CPU uit te lezen en de weer te geven tekst aan te passen.

Onder water gebruiken die Timer-componenten trouwens ook een aparte thread, maar daar heb je als ontwikkelaar (gelukkig) niet (zoveel) mee te maken.

Iig goed plan eendje, ik dacht al meteen te moeilijk :)

python: kom er niet echt uit
« Reactie #12 Gepost op: 2008/04/01, 21:53:19 »
ik gebruik glade en pygtk, en ben ook nog maar beginner...nuja, dat word nog wat opzoeken dan morgen.

Offline eendje

  • Lid
python: kom er niet echt uit
« Reactie #13 Gepost op: 2008/04/01, 22:00:35 »
Citaat van: Nunslaughter
ik gebruik glade en pygtk, en ben ook nog maar beginner...nuja, dat word nog wat opzoeken dan morgen.
Tis mij nog niet gelukt een programma met pygtk te maken :P
Een dag niets geleerd is een dag niet geleefd!
Ik blog dus ik besta!
__________________________________________________________
Een vraag? Heb je al eens gekeken op: http://wiki.ubuntu-nl.org/FAQ?

python: kom er niet echt uit
« Reactie #14 Gepost op: 2008/04/01, 22:14:44 »
bwa, is helemaal niet zo moeilijk hoor.

hier staan wat tutorials die mij heel wat geholpen hebben op het begin.


nja, dan heb ik morgen weer iets te doen, mij nog wat verdiepen in de massa leesvoer op het net. nu is het tijd om mijn vriendin aandacht te geven...

Offline eendje

  • Lid
python: kom er niet echt uit
« Reactie #15 Gepost op: 2008/04/01, 22:22:23 »
Citaat van: Nunslaughter
bwa, is helemaal niet zo moeilijk hoor.

hier staan wat tutorials die mij heel wat geholpen hebben op het begin.


nja, dan heb ik morgen weer iets te doen, mij nog wat verdiepen in de massa leesvoer op het net. nu is het tijd om mijn vriendin aandacht te geven...
Dat is inderdaad een leuk blog. Ik heb de tutarial gevolgd voor GTK maar blijkbaar is die voor een andere versie van Glade dan die in DApper zit, want het klopte voor geen meter (en het werkte ook voor geen meter)
Een dag niets geleerd is een dag niet geleefd!
Ik blog dus ik besta!
__________________________________________________________
Een vraag? Heb je al eens gekeken op: http://wiki.ubuntu-nl.org/FAQ?

python: kom er niet echt uit
« Reactie #16 Gepost op: 2008/04/08, 17:16:02 »
ok het heeft even geduurd, maar ik heb iets gevonden dat werkt.

import gobject

self.timer = gobject.timeout_add(1000, self.timer2)

def timer2(self):
if toggled == True:
   if temp < '%s' %low :
print 'kleiner dan', low
   elif (temp >= '%s' %low) & (temp <= '%s' %high) :
print 'tussen', low, 'en', high
   else:
print 'groter dan', high
   return True
else:
   return False
zo checkt hij om de seconde en blijft mijn gui niet vasthangen.


wat voor versie van glade zit er dan in dapper? die tutorials zijn gemaakt met glade 2 en ik heb ze toch redelijk kunnen volgen met glade 3.

Offline eendje

  • Lid
python: kom er niet echt uit
« Reactie #17 Gepost op: 2008/04/08, 19:12:07 »
Mooi dat je de oplossing hebt!

Glade versie 0.4 cvs (heel oud dus, maar ja dat is Dapper ook :D)
Een dag niets geleerd is een dag niet geleefd!
Ik blog dus ik besta!
__________________________________________________________
Een vraag? Heb je al eens gekeken op: http://wiki.ubuntu-nl.org/FAQ?