Wie kann ich einfach das *User* Temp Verzeichnis unter linux herraus bekommen?
tempfile.gettempdir() liefert immer nur das Globale Verzeichnis: /tmp
User temp verzeichniss...
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Ja, genau.frabron hat geschrieben:Schwebte dir sowas wie /home/user/tmp vor, oder was hast du erwartet?
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...
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
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
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.?
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.?
- 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:
EDIT: Wobei Usernamen nutzten ist nicht so einfach, denn im os.environ steckt nur:
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
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Hach, zu schade, dass der Code nicht verfuegbar ist .. oh moment: http://hg.python.org/cpython/file/e0cd3 ... le.py#l127jens 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?
Es werden nur die ueblichen Verdaechtigen ueberprueft, nicht Nutzerabhaengig.
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
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?
Oder sehe ich das falsch?
- 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...
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...
