Gamelimiter - Limit your Gaming

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
deets

Sowas musst du manuell programmieren, und es ist ja nun auch trivialst.
Scriptinggamer
User
Beiträge: 107
Registriert: Sonntag 24. Juni 2012, 16:38
Wohnort: Werder/Havel

Und kann man das root fenster wären dem blockieren? Also das man darauf nichts mehr klicken kann?
Gruß
Scriptinggamer
User
Beiträge: 107
Registriert: Sonntag 24. Juni 2012, 16:38
Wohnort: Werder/Havel

Hallo, ich mal wieder,
Nachdem ich mal wieder zu dumm für git war, hab ichs letztendlich doch geschafft und das Script ist jetzt verfügbar, ich hab versucht alles schön zu Ordnen und Aufzubauen und den Editor Verbessert. Da ich aber komplet von Vorne angefangen hab, kann ich nicht so genau sagen was ich wo geändert hab, schauts euch einfach an :D
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Ich habe das ganze mal überflogen, alles was mir aufgefallen ist (Logik habe ich mal außen vorgelassen):

Zeile 14: du meintest 79 Zeichen, oder ;).

Zeile 156:

Code: Alles auswählen

        if add_mode.get() == 0:
            self.add_task_auto()
        elif add_mode.get() == 1:
            self.add_task_from_list()
        elif add_mode.get() == 2:
            self.add_task_manual()
Sowas kann man schön mit einem Dictionary machen (das lässt sich dann auch einfacher erweitern):

Code: Alles auswählen

dispatch = {0 : self.add_task_auto, 1 : self.add_task_from_list, 2 : self.add_task_manual}
dispatch[add_mode.get()]()
In diesem Fall könnte man auch eine Liste verwenden:

Code: Alles auswählen

dispatch = [self.add_task_auto, self.add_task_from_list, self.add_task_manual]
dispatch[add_mode.get()]()
Zeile 336:

Code: Alles auswählen

def system_test():
    try:
        subprocess.call("taskkill /?", shell = True)
    except:
        return "tskill"
    else:
        return "taskkill"
Das is garnicht schön und funktioniert auch nicht (unter Linux existiert weder tskill noch taskkill), des Weiteren fängst du *jeden* Fehler ab, auch z.B. wenn der Nutzer mit `Strg+C` unterbrechen will. Fange nur die Fehler ab, die du auch abfangen willst, in diesem Fall `subprocess.CalledProcessError`.

Zeile 343: Die Funktion verstehe ich nicht, die wird immer einen Fehler werfen da es `task.exe` nicht gibt → NameError.
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

Hey, danke für die Tipps,

also das mit der liste is ne gute idee, ich bin ja noch nicht so erfahren, in php würde man es ja mit case machen :D

Es sollen also maximal 79 Zeichen sein? Och mist, muss ich wohl noch ein bisschen nacharbeiten...

beim Systemtest war ich zu faul um den Error zu suchen, ja, das sollte ich wohl auch ersetzen

und zum Schluss: doch, die Funktion tut was sie soll, der Funktion wird ein Argument (task) mitgegeben, task steht für einen Prozess aus dem psutil Modul und hat eine Instanz-Variable (exe). Die Funktion testet, ob das Programm die Rechte dazu hatt auf diese exe-Variable zuzugreifen, ich weiß nicht ob es da ne bessere Methode gibt, aber so funktioniert es zumindest.

Gruß
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Scriptinggamer hat geschrieben:und zum Schluss: doch, die Funktion tut was sie soll, der Funktion wird ein Argument (task) mitgegeben, task steht für einen Prozess aus dem psutil Modul und hat eine Instanz-Variable (exe). Die Funktion testet, ob das Programm die Rechte dazu hatt auf diese exe-Variable zuzugreifen, ich weiß nicht ob es da ne bessere Methode gibt, aber so funktioniert es zumindest.
Mein Fehler, das habe ich übersehen, aber bist du dir sicher, dass das eine Funktion/Methode ist, die etwas testet?

Laut Dokumentation gibt `.exe` den Pfad zurück:
* exe
The process executable as an absolute path name.
Das funktioniert auch in meinem Beispiel so:

Code: Alles auswählen

In [1]: import psutil

In [2]: psutil.Process(1202)
Out[2]: <psutil.Process(pid=1202, name='ipython2') at 170413452>

In [3]: p = _

In [4]: p.exe
Out[4]: '/usr/bin/python2.7'

In [5]: psutil.Process(3065).exe
Out[5]: '/usr/lib/chromium/chromium'
//Edit: Nach einem Blick in den Code sieht das so aus, als würde es unter Linux diverse Fehler geben (wie Access denied, wenn die Rechte nicht passen) und unter Windows gibt es im schlechtesten Fall einen leeren String zurück.
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

Nein, Windows gibt halt ebenfals einen error zurück, und desshalb versucht diese Funktion eben task.exe aufzurufen, wenn es nicht geht gibt sie False zurück, woraufhin der Prozess dann, weiter oben im Code, nicht in die Liste aufgenommen wird um Fehler zu vermeiden.
Gruß
BlackJack

@Scriptinggamer: Wenn `psutil` verwendet wird, wofür ist dann der Rückgabewert von `system_test()` gedacht‽
Scriptinggamer
User
Beiträge: 107
Registriert: Sonntag 24. Juni 2012, 16:38
Wohnort: Werder/Havel

Zum töten der Prozesse benutze ich subprocess, geht das mit psutil genauso gut?
über den cmd befehl kann ich ja noch parameter dazu stecken (z.B. das das Programm nicht nur Sanft gefragt wird ob es sich denn freundlicherweise schließen würde, SONDER DAS ES EINFACH GNADENLOS ABGEKNALLT WIRD, MUHAHAHA)
Hier die kleinen Verbesserungen
Gruß
BlackJack

@Scriptinggamer: `kill()` klingt doch recht gnadenlos, oder? ;-)
Scriptinggamer
User
Beiträge: 107
Registriert: Sonntag 24. Juni 2012, 16:38
Wohnort: Werder/Havel

.kill wäre ja auch systemunabhängig oder?
Scriptinggamer
User
Beiträge: 107
Registriert: Sonntag 24. Juni 2012, 16:38
Wohnort: Werder/Havel

Aber ich kann es nur in der Python Version benutzen, in der .exe lässt sich das nicht mit admin-rechten ausführen :(
und z.B. Crossfire lässt sich somit nichtmehr beenden, auch als admin nicht..., aber die python version wäre somit ja systemunabhängig oder?
Antworten