2010-06-23 10 views
5

Estoy desarrollando el sistema de archivos FUSE con python. El problema es que después de montar un sistema de archivos no tengo acceso a stdin/stdout/stderr desde mi secuencia de comandos del fusible. No veo nada, ni siquiera los trazados. Estoy tratando de ejecutar pdb como este:Ejecute pdb sin stdin/stdout usando FIFO

 

import pdb 
pdb.Pdb(None, open('pdb.in', 'r'), open('pdb.out', 'w')).set_trace() 
 

Todo funciona bien, pero muy inconveniente. Quiero hacer pdb.in y pdb.out como archivos fifo pero no sé cómo conectarlo correctamente. Idealmente, quiero escribir comandos y ver la salida en un terminal, pero estaré contento incluso con dos terminales (en un comando poner y ver salida en otro). Preguntas:

1) ¿Es mejor/otra forma de ejecutar pdb sin stdin/stdout?

2) ¿Cómo puedo redireccionar stdin a pdb.in fifo (Todo lo que escribo debe ir a pdb.in)? ¿Cómo puedo redireccionar pdb.out a stdout (tuve errores extraños con "cat pdb.out" pero quizás no entiendo algo)

Respuesta

4

Antes de comenzar la aplicación de pitón

mkfifo pdb.in 
mkfifo pdb.out 

Luego, cuando AP se llama se puede interactuar con él utilizando estos dos comandos gato, uno corriendo en el fondo

cat pdb.out & cat > pdb.in 

Nota el apoyo readline no lo hace trabajo (es decir, flecha arriba)

1

Acabo de toparme con un problema similar en un caso de uso mucho más simple:

  • depurar un programa simple de Python ejecutado desde la línea de comandos que tenía un archivo conectado a sys.stdin, lo que significa que no hay forma de utilizar la consola para pdb.

que terminaron su solución mediante el uso de wdb.

Desglose rápido para mi caso de uso. En el shell, instale el servidor wdb y el cliente wdb:

pip install wdb.server wdb 

Ahora ejecuta el servidor wdb con:

wdb.server.py 

Ahora usted puede navegar a localhost: 1984 con el navegador y ver una interfaz listando todos los programas de Python en ejecución. La página anterior del proyecto wdb contiene instrucciones sobre lo que puede hacer si desea depurar alguno de estos programas en ejecución.

En cuanto a un programa bajo su control, puede puede depurar desde el principio con:

wdb myscript.py --script=args < and/stdin/redirection 

O, en su código, que puede hacer:

import wdb; wdb.set_trace() 

Esto hará que aparezca una interfaz en su navegador (si es local) que muestra el programa rastreado.

O puede navegar al wdb.server.pyport para ver todas las sesiones de depuración en curso en la parte superior de la lista de ejecutar los programas de Python, que luego puede utilizar para acceder a la sesión de depuración específica que desee.

en cuenta que los comandos para navegar por el código durante la traza son diferentes a las estándar pdb queridos, por ejemplo, al paso en una función se utiliza en lugar de .ss y pasar por encima de usar .n en lugar de n. Ver el wdb README en el enlace de arriba para más detalles.