Steckt übrigens seit heute bei mir im Library Verzeichnis und werde ich sicherlich für jedes Grafische Programm, das mit Lockfiles arbeite, verwenden

lg
Das stimmt so nicht. Sie läuft nur dann nicht unter älteren System, wenn pywin32 oder ctypes nicht installiert sind. Eine dieser Bibliotheken als zusätzliche Abhängigkeit für Programme mitzuliefern, sollte doch - zumindest für normale Desktop-Anwendungen - kein Problem sein. Zumal ctypes doch bei Python 2.5 sowieso dabei ist...Blattlaus hat geschrieben:Unter Windows 2000 läuft er natürlich nicht. Genau so wenig unter NT und den älteren Sachen. Wobei da eigentlich nur 2000 relevant sein dürfte.
Sie ist halt - zumindest unter Linux - nur nicht wirklich Standard. Da sind Lockfiles mit pid die übliche Technik für sowas.Blattlaus hat geschrieben: Ich weiß nicht, was ihr gegen die Methode mit dem Server habt, das läuft unter jedem Betriebssystem wo Python läuft.
Hi Blattlaus!Blattlaus hat geschrieben:Ich weiß nicht, was ihr gegen die Methode mit dem Server habt, das läuft unter jedem Betriebssystem wo Python läuft.
In der Tat meckert py2exe, dass er diese Module nicht Einbinden konnte...Sie läuft nur dann nicht unter älteren System, wenn pywin32 oder ctypes nicht installiert sind.
Full ack!lunar hat geschrieben:[...]
Sie ist halt - zumindest unter Linux - nur nicht wirklich Standard. Da sind Lockfiles mit pid die übliche Technik für sowas.
Außerdem vermeidet diese Technik, dass sämtliche Ports für localhost belegt sind, weil alle mögliche Programme ihre Server aufsetzen...
[...]
Hi oliver!oliver1974 hat geschrieben:In der Tat meckert py2exe, dass er diese Module nicht Einbinden konnte... Da fehlt mir noch schlicht die Erfahrung, wie binde ich denn diese erfolgreich ein?
Hi!Leonidas hat geschrieben:Davon ist in /var/lock schreiben nicht unbedingt schlau auf Multiuser-Systemen. Wenn ein User das Programm offen hat, kann ein anderer das nicht mehr. Viele Betriebssysteme ermöglichen es, mehrere User auch grafisch einzuloggen, daher kommt dieses Problem noch erschwerend hinzu.
Dies ist sowieso sichergestellt, denn beim Versuch an einen Port zu horchen der von einem anderen Prozess schon benutzt wird, gibt es einen Fehler.gerold hat geschrieben:Ein HTML-Server, der auf Port 80 horcht, sollte "global" nur einmal gestartet werden können.
Also im Explorer sehe ich einen Ordner Gemeinsame Dokumente unter XP, wenn man draufklickt kommt man in ``Dokumente und EInstellungen\All Users\Dokumente`` daher würde ich sagen, dass es möglcih wäre dass User in ``All Users`` schreiben könnten (ich denke dort ist auch ein Temp-Ordner). Allerdings finde ich es recht unlogisch, dass ``All Users`` schreibbar für nicht-Administratoren wäre.gerold hat geschrieben:Unter Linux könnte ich mir vorstellen, dass ``/tmp`` so ein Ort sein könnte. Aber unter Windows zeigt die Umgebungsvariable ``%TEMP%`` bei mir auf ``J:\DOKUME~1\Gerold\LOKALE~1\Temp``. Das ist garantiert kein Ordner, in den andere Benutzer schreiben dürfen.
Code: Alles auswählen
if appdatadir:
lockdir = os.path.join(appdatadir, "Lockfiles")
else:
env_home = os.environ.get("HOME")
appdir = os.path.join(env_home, appname)
lockdir = os.path.join(appdir, "Lockfiles")
if not (os.path.exists(lockdir) and os.path.isdir(lockdir)):
os.makedirs(lockdir)
Unter Linux (oder umfassender, POSIX - Systemen) steht jetzt die Lösung noch aus... aber was spricht dagegen, unter Windows XP und Co.Gibt es einen Ort, an dem jeder Benutzer eines Systems eine Datei (exakt benannte) erstellen, bearbeiten und löschen darf?
Code: Alles auswählen
def __init__(self, appname, global_lock = False):
"""
Initialisiert die Klasse und legt den Lockfilenamen fest.
:param appname: Eindeutiger Name der Anwendung. Anhand dieses
Parameters wird der Name des Lockfiles oder der Serverport für den
XMLRPC-Server generiert.
:param global_lock: Wenn True, dann wird diese Anwendung systemweit
nur einmal ausgeführt, auch bei Mehrbenutzer-Systemen.
"""
self.appname = appname
self.xmlrpcport = None
# Lockfilename festlegen
appdatadir = os.environ.get("APPDATA", None)
# ACHTUNG: Entsprechendes Verzeichnis für
# POSIX - Systeme (Linux, BSD, MacOSX)
# fehlt hier noch.
if global_lock and appdatadir:
lockdir = os.path.join(appdatadir, "Lockfiles")
else:
env_home = os.environ.get("HOME")
appdir = os.path.join(env_home, appname)
lockdir = os.path.join(appdir, "Lockfiles")
if not (os.path.exists(lockdir) and os.path.isdir(lockdir)):
os.makedirs(lockdir)
(Hier der Rest....)