threads und stdin/out/err
Verfasst: Freitag 11. Mai 2007, 16:52
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
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