Shutdowner - noch so ein Shutdown-Timer ;)

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Py-Prog
User
Beiträge: 673
Registriert: Dienstag 16. Februar 2010, 17:52
Wohnort: G:\ermany

cofi hat geschrieben:Das viel wichtigere Argument fuer eine `main` Funktion ist, dass man genau sieht welche Variablen beeinflusst werden: Lokale Variablen und globale nur mit `global`.
Bei einem "main-Block" kann man beliebig globale Variablen benutzen ohne das zu kennzeichnen. Was nach Freiheit klingt, macht es aber nur schwerer fuer den Leser den Code nachzuvollziehen.
Stimmt das mit dem root.destroy() hätte ja gar nicht funktioniert weil die variable nicht global war. Dann endere ich das bei meinen Programmen jetzt auch um.
Aber ich dachte wenn man global her nimmt macht man "immer" etwas falsch?
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
deets

Wenn man "immer" etwas falsch machen wuerde, dann wuerde das bedeuten man koennte es aus der Sprache werfen.

Man macht "so gut wie immer" etwas falsch, und ich kann mich nicht erinnern, wann ich es in den letzten Monaten oder gar Jahren verwenden musste. Um ehrlich zu sein: mir faellt auf Anhieb noch nicht mal ein Fall ein, wo es denn noetig waere... Aber vielleicht hat da wer anders ne Idee.
Py-Prog
User
Beiträge: 673
Registriert: Dienstag 16. Februar 2010, 17:52
Wohnort: G:\ermany

Also Prinzipiell das gleiche wie mit der exec() Funktion die ich vergessen sollte das es sie gibt.
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Py-Prog hat geschrieben:Also Prinzipiell das gleiche wie mit der exec() Funktion die ich vergessen sollte das es sie gibt.
Einfach weiter vergessen, dass es global und exec überhaupt gibt. Wie auch deets kann ich mich an keine Situation in den letzten Jahren erinnern, in denen ich eins von beiden hätte sinnvoll einsetzen könnten.
Das Leben ist wie ein Tennisball.
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

EyDu hat geschrieben:Einfach weiter vergessen, dass es global und exec überhaupt gibt. Wie auch deets kann ich mich an keine Situation in den letzten Jahren erinnern, in denen ich eins von beiden hätte sinnvoll einsetzen könnten.
Wenn es mal schnell gehen muss:

Code: Alles auswählen

import weechat as w
from subprocess import check_call
from time import time

w.register('notify', 'dav1d', '1.0', 'GPL', 'uses libnotify to notify on highlight', '', '')

INTERVAL = 30

last = 0 

def notify_send(title, msg, icon):
    check_call(['notify-send', title, msg, '-i', icon])


def notify(data, signal, msg):
    global last
    print signal
    if time() - last > INTERVAL and not msg.split()[0] == '--':
        n = 'Highlight' if signal.endswith('highlight') else 'Private Message'
        title = '{}: {}'.format(n, msg.split()[0])
        notify_send(title, msg.split(None, 1)[1], 'notification-message-im')
    last = time()

    return w.WEECHAT_RC_OK

w.hook_signal('weechat_highlight', 'notify', '')
w.hook_signal('weechat_pv', 'notify', '')
the more they change the more they stay the same
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Es war klar, dass ich das "sinnvoll" in meinem Beitrag hätte fett schreiben sollen. Natürlich kann man so etwas in einem Test machen, aber so etwas würde doch niemand ernsthaft in produktivem Code nutzen wollen.
Das Leben ist wie ein Tennisball.
lunar

@Dav1d: Ich sehe nicht, warum "global" in diesem Beispiel sinnvoll sein sollte… ich würde ja einen Dekorator implementieren, um die Ausführung einer Funktion zu begrenzen:

Code: Alles auswählen

def throttled(limit):
    def decorator(func):
        self = lamda: pass
        self.last_call = 0
        self.last_return_value = None
        def wrapper(*args, *kwargs)
             now = time()
             if now - self.last_call > limit:
                 self.last_return_value = func(*args, **kwargs)
             return self.last_return_value
        return wrapper
    return decorator

@throttled(limit=30)
def notify(data, signal, msg):
     n = 'Highlight' if signal.endswith('highlight') else 'Private Message'
     title = '{}: {}'.format(n, msg.split()[0])
     notify_send(title, msg.split(None, 1)[1], 'notification-message-im')
Py-Prog
User
Beiträge: 673
Registriert: Dienstag 16. Februar 2010, 17:52
Wohnort: G:\ermany

lunar hat geschrieben:@Dav1d: Ich sehe nicht, warum "global" in diesem Beispiel sinnvoll sein sollte…
Alles ist zu etwas gut, und wenn es nur als schlechtes Beispiel dient.
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Scriptinggamer
User
Beiträge: 107
Registriert: Sonntag 24. Juni 2012, 16:38
Wohnort: Werder/Havel

Drifften wir nicht etwas ab? ;)
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

@lunar, wow schöne Lösung, darauf wäre ich nicht gekommen!

@Py-Prog, schönes Avatar, so bunt.
the more they change the more they stay the same
Scriptinggamer
User
Beiträge: 107
Registriert: Sonntag 24. Juni 2012, 16:38
Wohnort: Werder/Havel

Also gibts nichts mehr am Shutdowner auszusetzen?
Gruß
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Scriptinggamer hat geschrieben:Also gibts nichts mehr am Shutdowner auszusetzen?
Naja, wir kennen ja deine jetzige Version gar nicht.
Dav1d hat geschrieben:@Py-Prog, schönes Avatar, so bunt.
Mich hat das Bild nach wenigen Betrachtungen so sehr genervt, dass es im Filter gelandet ist.
Das Leben ist wie ein Tennisball.
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

EyDu hat geschrieben:
Schönes Avatar, so bunt.
Mich hat das Bild nach wenigen Betrachtungen so sehr genervt, dass es im Filter gelandet ist.
Ich finde es so toll, dass ich es sogar geklaut habe (das siehst du ja anscheinend nicht, dank dem Filter).

Das Forum braucht Sarkasmus-BBCodes
Zuletzt geändert von Anonymous am Dienstag 24. Juli 2012, 10:01, insgesamt 1-mal geändert.
Grund: Tags korrigiert
the more they change the more they stay the same
Scriptinggamer
User
Beiträge: 107
Registriert: Sonntag 24. Juni 2012, 16:38
Wohnort: Werder/Havel

Ich hab ihn ersetzt, aber heute nachmittag hab ich Zeit ihn nochmal zu posten, ich glaub ich hab aber nur noch die shutdown befehle und die erkennung des Befehls geändert.
Gruß
deets

Pack ihn doch bitte auf sowas wie Github oder pastebin - dann kann man das lesen. In github zB koennte man dann auch direkt sehen, *was* du geaendert hast. Und was du in jedem Fall aendern solltest ist die Zeit-Berechnung, dafuer ist datetime das geeignete Modul.
Scriptinggamer
User
Beiträge: 107
Registriert: Sonntag 24. Juni 2012, 16:38
Wohnort: Werder/Havel

Ich hab mich bei diesem git angemelden und es heruntergeladen, wie lade ich jetzt meine datein hoch?
Gruß
deets

Bei "git" kann man sich nicht anmelden. Wenn bei github. Und die haben ziemlich gute Tutorials. Verlinkt *direkt* von der Startseite:

https://github.com/

Schritte 1 - 4
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

the more they change the more they stay the same
Scriptinggamer
User
Beiträge: 107
Registriert: Sonntag 24. Juni 2012, 16:38
Wohnort: Werder/Havel

Jaaaaa, nach einigen Stunden hab ich es tatsächlich hinbekommen! Hier ist das Script also :D
Shutdowner
Mit datetime muss ich mich noch ein bisschen beschäftigen...
Wie kann ich z.B. mit denen Rechnen?
Gruß
Benutzeravatar
ocoal
User
Beiträge: 32
Registriert: Mittwoch 20. Juli 2011, 22:44

Scriptinggamer hat geschrieben:... Mit datetime muss ich mich noch ein bisschen beschäftigen...
Wie kann ich z.B. mit denen Rechnen? ...
... mit datime.timedelta

Code: Alles auswählen

>>> from datetime import datetime
>>> now = datetime.now()
>>> now
datetime.datetime(2012, 7, 24, 21, 23, 36, 328000)
>>> from datetime import timedelta
>>> now - timedelta(days=1)
datetime.datetime(2012, 7, 23, 21, 23, 36, 328000)
-Colin-
Antworten