Hallo Leute. Ich schribsel atm. j4f an einem kleinen jabber bot für mich und bin dabei auf ein mMn. dummes Problem gestoßen:
Ich will in den bot eine python code.InteractiveConsole integrieren, soweit so gut. Python macht einem das ja eigentlich auch wirklich einfach, sys.stdin/out umleiten und schwupps kann ich das ganze auf den "Chat" legen. Da der bot jedoch während der ganze Aktion auf andere Sachen reagieren muss bin ich gezwungen den Interpreter als eigenen Thread laufen lassen.
Schon hab ich den Salat, sys.stdout/in/err sind global auch über Thread hinweg, d.h. ändere ich sie um sie für den Interpreter umzubiegen ändert es sich auch für meinen "Hauptthread". Das ist ziemlich unangenehm weil ich den bot so geschrieben habe das ich ihn mit python -i aufrufe, d.h. meine schöne shell leite ich plötzlich auch um ohne das zu wollen.
Selbst wenn ich auf -i verzichten würde wärs immer noch dämlich wenn 2 externe Benutzer gleichzeitig den python Interpreter benutzen wollen, da brauchte ich ja dann 2 Threads und der ersetzte stdout/in/err kann ja nicht riechen was das richtige Ziel ist....ziemlich dumm also
Zwar kann ich in code.InteractiveConsole die raw_input und write Funktion überschreiben aber die gelten nicht für die mit dieser shell ausgeführten Befehle. Schickt einer einen print Befehl an meinen bot läuft der über stdout und nicht über die überschriebene Funktion.
Da ich von python bis auf ein paar Tutorials etc. eher wenig Ahnung hab hoffe ich das ich was übersehen hab und die Lösung einfach ist
Ich hoffe ihr könnt mir helfen!
MfG
.D0T
ps: Fast vergessen, CPython 2.5 unter win32
threads und stdin/out/err
-
- User
- Beiträge: 1790
- Registriert: Donnerstag 28. Oktober 2004, 16:33
- Wohnort: Graz, Steiermark - Österreich
- Kontaktdaten:
Sowas ähnliches machten wir für das Debugging System in Werkzeug.
Hier eine Klasse die sys.stdout Wrappt, dass jeder Thread "seinen eigenen" stream bekommt: http://trac.pocoo.org/browser/werkzeug/ ... til.py#L24
Udn hier wird er installiert: http://trac.pocoo.org/browser/werkzeug/ ... t__.py#L61
Hier eine Klasse die sys.stdout Wrappt, dass jeder Thread "seinen eigenen" stream bekommt: http://trac.pocoo.org/browser/werkzeug/ ... til.py#L24
Udn hier wird er installiert: http://trac.pocoo.org/browser/werkzeug/ ... t__.py#L61
TUFKAB – the user formerly known as blackbird
-
- User
- Beiträge: 1790
- Registriert: Donnerstag 28. Oktober 2004, 16:33
- Wohnort: Graz, Steiermark - Österreich
- Kontaktdaten:
Joa. Nach der Benennung ist mir das auch eingefallen. Aber da die Projekte bis auf den Namen nix gemeinsam haben isses jetzt glaub ich kein VerbrechenY0Gi hat geschrieben:OT: blackbird, der Name gefällt mir irgendwie nicht. Erinnert mich zu sehr an Werkkzeug.
TUFKAB – the user formerly known as blackbird