While we are at the subject of interactive shells, I have a handy snippet
that lets me drop into an interactive shell anytime:
class RestoredStandardInputContext(object):
def __enter__(self):
self.backup_stdin = os.dup(sys.stdin.fileno())
os.dup2(sys.stdout.fileno(), sys.stdin.fileno())
def __exit__(self, error_type, error, traceback):
os.dup2(self.backup_stdin, sys.stdin.fileno())
def interact(locals=None, plain=False):
with RestoredStandardInputContext():
code.interact(local=locals or
inspect.currentframe().f_back.f_locals)
__builtins__['INTERACT'] = interact
This way, when I'm developing and I have uWSGI in the foreground and
attached to a terminal, I can always add INTERACT() anywhere in my Python
code (for example, inside a django view I'm debugging, or when I hit a
special URL, or whatever) and get an interactive shell with the current
local scope. Like I said, I found it very handy, maybe it should be added to
uwsgi (from uwsgi import interact?) maybe not.
To do something similar for a backgrounded process without a terminal, I
also have a more complex snippet to fork the current process and launch
manhole <http://twistedmatrix.com/documents/8.1.0/api/twisted.manhole.html>,
twisted's in-process Python shell over telnet. I use this in production when
I need to debug very weird cases, memory leaks, etc. I can paste this code
here as well if someone is interested.
- Yaniv
On Thu, Aug 4, 2011 at 8:07 AM, Roberto De Ioris <[email protected]> wrote:
>
> Hi everyone, i have just committed support for the uWSGI python
> interactive shell. It is a simple/standard python shell living in the
> uWSGI environment.
>
> For example:
>
> ./uwsgi --import sigme -s :3031 --pyshell -M --spooler myspool -p 4 -w
> uwsgicc --cache 100
>
>
> Will load 4 normal workers but the first will run a python shell from
> which you cann call uwsgi api functions, monitor processes, issuing reload
> and so on.
>
> I have found it very handy to test spooler jobs and caching.
>
> --
> Roberto De Ioris
> http://unbit.it
> _______________________________________________
> uWSGI mailing list
> [email protected]
> http://lists.unbit.it/cgi-bin/mailman/listinfo/uwsgi
>
_______________________________________________
uWSGI mailing list
[email protected]
http://lists.unbit.it/cgi-bin/mailman/listinfo/uwsgi