User temp verzeichniss...

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Wie kann ich einfach das *User* Temp Verzeichnis unter linux herraus bekommen?

tempfile.gettempdir() liefert immer nur das Globale Verzeichnis: /tmp

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
frabron
User
Beiträge: 306
Registriert: Dienstag 31. März 2009, 14:36

Afaik gibt es das nicht. Zumindest unter Debian ist /tmp mit Sticky-Bit, so dass nur der User, der Daten in /tmp ablegt, die auch verarbeiten kann. Schwebte dir sowas wie /home/user/tmp vor, oder was hast du erwartet?
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

frabron hat geschrieben:Schwebte dir sowas wie /home/user/tmp vor, oder was hast du erwartet?
Ja, genau.

Zum eigentlichen Problem: mit tempfile.gettempdir() lege ich einen Pfad für einen Cache einer Web-App fest.

Dumm ist, wenn mehrere User die gleiche App und somit den gleichen Cache nutzten...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
sparrow
User
Beiträge: 4600
Registriert: Freitag 17. April 2009, 10:28

Hallo Jens,

was machst du wenn ein User mehrmals die Applikation startet? Vllt. auf verschiedenen Ports als verschiedene Instanzen?

Wie wärs mit einem Prefix für die Dateien oder ein Unterverzeichnis unter /tmp das den Benutzernamen enthält?
Entweder ein hash, eine Zufallszeichenkette oder die PID?

Gruß
Sebastian
frabron
User
Beiträge: 306
Registriert: Dienstag 31. März 2009, 14:36

Ich benutze oft tempfile.mkdtemp() für sowas und überlasse es Python, einen geeigneten Namen zu finden. Allerdings weiss ich nicht, ob das auch im Webumfeld funktioniert.
Temporäre Ordner, wie du sie dir vorstellst, gibt es so unter Linux nicht. Läuft der Server dann unter den Rechten eines Systemnutzers? Oder ist das immer www-data, wie beim Apache z.B.?
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

In meinem Falle läuft apache mit dem user meines accounts. Also nicht mit nobody. Weiß jemand was tempfile.gettempdir() ausspuckt, wenn apache als nobody läuft?

Es ist auch nicht so, das man einen cache pro thread/prozess benötig: Schließlich soll der cache in einem multi-thread Umfeld (fastCGI) auch gleichzeitig genutzt werden.

tempfile.mkdtemp() würde IMHO pro thread/prozess ein eigenes Verzeichnis nutzten...

Am klügsten erscheint mit z.Z. den Usernamen mit aufzunehmen...

Gerade mache ich das so, ohne Usernamen:

Code: Alles auswählen

_PATH_CHMODE = 0700
def _get_and_create_tempdir_location(suffix):
    """Little helper for easy setup a cache filesystem path in temp"""
    import os, tempfile
    path = os.path.join(tempfile.gettempdir(), suffix)
    if not os.path.exists(path):
        os.makedirs(path, _PATH_CHMODE)
    else:
        os.chmod(path, _PATH_CHMODE)
    return path

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
        'LOCATION': _get_and_create_tempdir_location("PyLucid_default_cache_%s" % SITE_ID),
    },
    'dbtemplates': {
        'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
        'LOCATION': _get_and_create_tempdir_location("PyLucid_dbtemplates_cache_%s" % SITE_ID),
    },
    'local_sync_cache': {
        'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
        'LOCATION': _get_and_create_tempdir_location("PyLucid_local_sync_cache_%s" % SITE_ID),
    }
}

EDIT: Wobei Usernamen nutzten ist nicht so einfach, denn im os.environ steckt nur:
  • VIRTUALENV_FILE
    PATH
    TZ
    DJANGO_SETTINGS_MODULE

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
frabron
User
Beiträge: 306
Registriert: Dienstag 31. März 2009, 14:36

Also ich meine ja, mkdtemp macht auch nix anderes als deine Funktion. Der Rest übersteigt leider meine Erfahrung, sorry ...
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

jens hat geschrieben:In meinem Falle läuft apache mit dem user meines accounts. Also nicht mit nobody. Weiß jemand was tempfile.gettempdir() ausspuckt, wenn apache als nobody läuft?
Hach, zu schade, dass der Code nicht verfuegbar ist .. oh moment: http://hg.python.org/cpython/file/e0cd3 ... le.py#l127

Es werden nur die ueblichen Verdaechtigen ueberprueft, nicht Nutzerabhaengig.
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Dann gib doch das/die Verzeichnise selbst an, was anderes macht die Funktion schließlich auch nicht. Du hast doch ein Verzeichnis für jeden Nutzer, dann musst du doch nur die Homeverzeichnise dieser ermitteln und dann mit dem Pfad zusammen setzen. Wenn nicht jeder von denen das gleiche Temporäre Verzeichnis hat kann man die doch gar nicht ermittelt, außer wenn eine entsprechen Konfigurations- oder Umgebungsvariable gesetzt wurde.
Oder sehe ich das falsch?
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Das ganze passiert eh in der "local_settings.py"... Da kann der admin natürlich auch feste Strings angeben...

Aber ich möchte halt nach Möglichkeit eine Lösung die direkt funktioniert...

Mit https://github.com/jedie/PyLucid/commit ... 3761cc2d48 hab ich das ganze ein wenig geändert. beim Aufruf von ./create_page_instance.sh wird automatisch der aktuelle Username in der erzeugen local_settings.py eingetragen... Anpassen kann der admin das dann immer noch...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten