Bottle: Micro Web Framework

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Du solltest natürlich erst in das richtige Verzeichnis wechseln und dann importieren.
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
MrNiceTry
User
Beiträge: 80
Registriert: Samstag 7. November 2009, 10:32

Was meinst Du mit "Du solltest natürlich erst in das richtige Verzeichnis wechseln".

Es ist alles im gleichen Verzeichnis: /var/www/todo
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Na schau dir mal deinen Code an. Du wechselt ja mit os.chdir in dein Verzeichnis. Nur vorher versuchst du bottle zu importieren - und das kann er einfach nicht finden. Importierst du bottle nach dem os.chdir, sollte es eigentlich klappen.
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
MrNiceTry
User
Beiträge: 80
Registriert: Samstag 7. November 2009, 10:32

Danke.

Habe wie folgt geändert:

Code: Alles auswählen

import sys, os

sys.path = ['/var/www/todo/'] + sys.path
os.chdir(os.path.dirname(__file__))

import bottle

import todo # This loads your application

application = bottle.default_app()

Funktioniert.
Sieht zumindest so aus. Bin morgen sicher.


Danke nochmal und gute Nacht.


MrNiceTry
MrNiceTry
User
Beiträge: 80
Registriert: Samstag 7. November 2009, 10:32

Wie muß ein Decorator aussehen, der mir ALLE Unterverzeichnisse durchreicht.
Also in jeder Tiefe.

Danke

MrNiceTry
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

du meinst, dass z.B.

/meine_app
/meine_app/foo
/mein_app/foo/bar/irgend/was

alle von der gleichen Route abgefangen werden?

Das sollte mit einer RegEx funktionieren.

Code: Alles auswählen

@bottle.route('/meine_app')
@bottle.route('/meine_app/:#.*#')
def meine_funktion():
    ...
Gruß, noisefloor
MrNiceTry
User
Beiträge: 80
Registriert: Samstag 7. November 2009, 10:32

(Wie) kann man ermitteln, wie Python/Bottle aufgerufen worden ist ?

Erfolgte der Aufruf von der Konsole oder durch Apache/WSGI ?


Danke.

MrNiceTry
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Es läuft immer ein WSGI-Server; wenn du Bottle-Anwendungen "aus der Konsole" startest, dann wird eben ein WSGI-Server in der Konsole gestartet :-)
MrNiceTry
User
Beiträge: 80
Registriert: Samstag 7. November 2009, 10:32

Ja, aber meine Frage ist: Kann man ermitteln WIE Python/Bottle gestartet wurde.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

MrNiceTry hat geschrieben:Ja, aber meine Frage ist: Kann man ermitteln WIE Python/Bottle gestartet wurde.
Wozu? Vielleicht hilft es uns, Dein eigentliches Problem zu verstehen...
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
MrNiceTry
User
Beiträge: 80
Registriert: Samstag 7. November 2009, 10:32

Meine Anwendung soll sich anders verhalten, wenn sie vom Apache aufgerufen wird, als wenn der Aufruf manuell von der Konsole gemacht wird.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

MrNiceTry hat geschrieben:Meine Anwendung soll sich anders verhalten, wenn sie vom Apache aufgerufen wird, als wenn der Aufruf manuell von der Konsole gemacht wird.
Naja das ist schon klar, aber inwiefern denn? Sind es inhaltlich wirklich andere Dinge oder geht es eher in Richtung Debug-Modus an / aus?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
MrNiceTry
User
Beiträge: 80
Registriert: Samstag 7. November 2009, 10:32

Sorry,

aber was soll das an meiner Frage ändern?

Ich kann gerne den Sinn und die Struktur meiner Anwendung erläutern.

Aber meine Frage ist doch einfach und klar formuliert, oder?

"Kann man ermitteln WIE die (Bottle-)Anwendung aufgerufen wurde."
(Entschuldigung. Aber falls das nicht klar verständlich ist, lasst es mich bitte wissen!)
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Sind zum Beispiel Port oder Host unterschiedlich für die beiden Server? Dann könntest du dir einfach das `environ` angucken.
MrNiceTry
User
Beiträge: 80
Registriert: Samstag 7. November 2009, 10:32

'environ' hat mich nicht weiter gebracht.

Über host und port kann ich das nicht differenzieren. Die können durchaus gleich sein.
Irgendwie kann ich das schon rausfinden. Ich könnte z.B. Startparameter verwenden.

Ich hatte nur gehofft, es gäbe eine elegantere Methode, möglicherweise aus dem System oder aus Python die Info zu bekommen.


MrNiceTry
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Hyperion fragt deswegen, weil er die Vermutung hat, dass es für dein Problem eine einfachere Lösung gibt als die von dir erdachte. Wenn du das Problem erklärst, kann man dir vielleicht Hinweise geben, wie man das ohne diese Starter-Prüfung lösen kann.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

kann man ermitteln, welcher Nutzer den Prozess gestartet bzw. unser welchem Nutzer er läuft?

Wenn's Apache sollte der Nutzer ziemlich sicher ein anderen sein als ein manueller Start?

BTW: Reicht der Port wirklich nicht? Default wäre ja Port 80 vs. Port 8080 (oder ein anderen, unprivilegierter Port).

Gruß, noisefloor


P.S.: Es würde mich auch interessieren, was in Abhängigkeiten von Startmethode anders sein soll. :-)
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

noisefloor hat geschrieben:kann man ermitteln, welcher Nutzer den Prozess gestartet bzw. unser welchem Nutzer er läuft?
Das kann man definitiv. Schau mal im os modul nach...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Da gibt es keinen erkennbaren Unterschied und selbst wenn da einer wäre dürfte man sich darauf nicht unbedingt verlassen können.

Nutz für solche Fälle einfach unterschiedliche Konfigurationen.
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Bottle-Bericht im freien Magazin 02/2011 (ab Seite 23).

(Ich sehe gerade, Marcel ist da selbst im Interview...)
Antworten