Hallo Forum,
Betrifft Windows-Umgebung(en):
ich habe aus meinen Pythonskripten eine Anwendung mit cx-Freeze erstellt.
Es funktioniert alles soweit prima, aber die erstellte ausführbare Datei kann mehrfach aufgerufen werden (kann mehrere Instanzen bilden).
Gibt es eine Möglichkeit, dass der erfolgreiche Aufruf der exe-Datei nur möglich ist, wenn diese exe-Datei noch nicht aktiviert wurde?
Vielen Dank im voraus für die Bemühungen.
rumpie
Exe mit cx-freeze - Verhindern eines Mehrfachaufrufs
Mehrere Möglichkeiten:
1. Du mußt einfach am Anfang Deines Programms die Prozessliste nach Deinem Programm selbst durchsuchen.
2. Einen globalen Eventhook installieren und beim Programmstart prüfen ob jemand auf dieses Event reagiert.
3. Den Anwender in den AGBs mit einer Konventionalstrafe drohen, falls er das Programm zweimal startet.
1. Du mußt einfach am Anfang Deines Programms die Prozessliste nach Deinem Programm selbst durchsuchen.
2. Einen globalen Eventhook installieren und beim Programmstart prüfen ob jemand auf dieses Event reagiert.
3. Den Anwender in den AGBs mit einer Konventionalstrafe drohen, falls er das Programm zweimal startet.
Ich denke, die übliche Art, dieses "Problem" zu lösen ist, nach dem Start eine Lockdatei anzulegen, wenn sie noch nicht existiert bzw. das Programm sofort zu beenden, wenn solch eine Lockdatei existiert. Problem in Anführungszeichen, weil ich generell kein Problem darin sehe, wenn es mehr als eine Instanz von einem Programm geben kann.
Ich habe das gefunden, was auf http://code.google.com/p/psutil/ verweist. Ich hätte jetzt gedacht eine temporäre Datei anzulegen und jeweils beim Programmstart zu schauen, ob sie bereits existiert, aber das ist sicher der Laien-Ansatz. Das mit den Prozessen klingt schon sinnvoll.
Wenn ich das os-Modul richtig verstehe, dann kann ich Prozess-IDs erfragen, aber ich sehe gerade keinen Weg die Liste aller Prozesse zu bekommen oder stehe ich auf dem Schlauch???
@derdon: zur Lockdatei - Ich hatte meinen Beitrag gepostet, bevor ich deinen Beitrag las. Kann so eine Datei nicht "verlorengehen", z. B. bei Aufräumarbeiten und wäre der Ansatz über Prozessliste nicht sauberer??? (Frage ich als Laie)
Wenn ich das os-Modul richtig verstehe, dann kann ich Prozess-IDs erfragen, aber ich sehe gerade keinen Weg die Liste aller Prozesse zu bekommen oder stehe ich auf dem Schlauch???
@derdon: zur Lockdatei - Ich hatte meinen Beitrag gepostet, bevor ich deinen Beitrag las. Kann so eine Datei nicht "verlorengehen", z. B. bei Aufräumarbeiten und wäre der Ansatz über Prozessliste nicht sauberer??? (Frage ich als Laie)
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Andersherum geht auch: Die Datei kann bei einem Programmabsturz uebrig bleiben. Insofern halte ich den Prozessansatz nicht nur fuer sauberer, sondern fuer den richtigen Weg - man muss nur aufpassen, dass man auch die eigene ID vorher herausfiltertpixewakb hat geschrieben:Kann so eine Datei nicht "verlorengehen", z. B. bei Aufräumarbeiten und wäre der Ansatz über Prozessliste nicht sauberer??? (Frage ich als Laie)
So eine Ueberpruefung kann durchaus seine Berechtigung haben, wenn ein Programm zB auf bestimmten Daten arbeitet - ich denke da an meinen Feedreader - oder dass der Benutzer meist keinen neuen Prozess sondern zB einen neuen Tab aufmachen will - ich denke da an Browser und HTML Dateien, die ich aus dem Filemanager oeffne.
Ich bin mir aber sicher, dass es zu dem Thema schon ein paar Threads gibt, einfach mal die Suche anwerfen.
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
Hallo Forum,
vielen Dank für die Antworten und die Hilfe.
Mit der Nutzung von psutil und der Auswertung der Prozessliste habe ich genau die Information, welche ich brauchte zum Verarbeiten..
Thema ist damit für mich als "erledigt markiert"
Viele Grüße
rumpie
vielen Dank für die Antworten und die Hilfe.
Mit der Nutzung von psutil und der Auswertung der Prozessliste habe ich genau die Information, welche ich brauchte zum Verarbeiten..
Thema ist damit für mich als "erledigt markiert"
Viele Grüße
rumpie
Nachfrage an alle, nicht an den Thread-Starter: Das Modul os oder sys bietet keine Option die Prozessliste zu lesen? Ich habe heute bei os gesucht und fand sachen, um die Prozess-id zu finden, aber nichts, was nach einer Liste aussah.
Also meine Frage: In den Standardmodulen gibt es keine Möglichkeit die Aufgabe zu lösen?
Also meine Frage: In den Standardmodulen gibt es keine Möglichkeit die Aufgabe zu lösen?
@pixewakb: Nicht direkt. Du kannst unter Linux natürlich selber das ``/proc/``-Dateisystem verarbeiten oder unter Windows mit `ctypes` die entsprechenden Systemaufrufe absetzen. Also Dir ein eigenes `psutil`-Modul schreiben.