¿Cómo depurar la aplicación python bajo uWSGI?

Cuando estoy tratando de usar el depurador pdb de Python bajo uWSGI, la ejecución no se detiene en el punto de interrupción, simplemente devuelve el trackback.

Aquí está el código:

def application(env, start_response): import pdb; pdb.set_trace() start_response('200 OK', [('Content-Type','text/html')]) return "Hello World" 

así es como lo ejecuto:

 uwsgi --http 127.0.0.1:7777 --wsgi-file uwsgi_test.py 

y esto es lo que obtengo:

 /home/andrey/Development/ttt/uwsgi_test.py(3)application() -> start_response('200 OK', [('Content-Type','text/html')]) (Pdb) Traceback (most recent call last): File "uwsgi_test.py", line 3, in application start_response('200 OK', [('Content-Type','text/html')]) File "uwsgi_test.py", line 3, in application start_response('200 OK', [('Content-Type','text/html')]) File "/usr/lib/python2.7/bdb.py", line 48, in trace_dispatch return self.dispatch_line(frame) File "/usr/lib/python2.7/bdb.py", line 67, in dispatch_line if self.quitting: raise BdbQuit bdb.BdbQuit [pid: 11421|app: 0|req: 1/1] 127.0.0.1 () {32 vars in 366 bytes} [Sun Aug 25 13:12:06 2013] GET / => generated 0 bytes in 63 msecs (HTTP/1.1 500) 0 headers in 0 bytes (0 switches on core 0) 

Al ser un servidor, uWSGI cierra el stdin (de hecho, lo remapsa a / dev / null).

Si necesita stdin (como cuando necesita un depurador de terminal) agregue:

 --honour-stdin 

Instalar el depurador remoto.

 pip install remote-pdb 

Establecer punto de interrupción en algún lugar de la aplicación.

 from remote_pdb import RemotePdb RemotePdb('127.0.0.1', 4444).set_trace() 

Conectarse al depurador remoto a través de telnet

 # Restart uwsgi to pick up changes ... # Trigger the breakpoint, (any action to evaluate the set_trace call) ... # Connect to debugger telnet 127.0.0.1 4444 

Es probable que desee ejecutar uWSGI con un solo trabajador / subproceso, para que los depuradores remotos no se pisen entre sí.

prueba esto

 uwsgi --http 127.0.0.1:7777 --wsgi-file uwsgi_test.py --logto /path/to/log/log.txt