Question

Je développe le système de fichiers FUSE avec python. Le problème est que, après le montage d'un système de fichiers je n'ai pas accès à stdin / stdout / stderr de mon script fusible. Je ne vois rien, même retraçage. Je suis en train de lancer pdb comme ceci:


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

Tout fonctionne très bien, mais très peu pratique. Je veux faire pdb.in et pdb.out fifo fichiers, mais ne sais pas comment se connecter correctement. Idéalement, je veux taper des commandes et voir la sortie dans un terminal, mais sera heureux même avec deux bornes (dans une des commandes de vente et de voir la sortie dans un autre). Questions:

1) Est-il préférable / autre moyen d'exécuter pdb sans stdin / stdout?

2) Comment puis-je rediriger stdin à pdb.in fifo (Tout ce que je type doit aller à pdb.in)? Comment puis-je rediriger pdb.out à stdout (j'ai eu des erreurs étranges avec « chat pdb.out » mais peut-être que je ne comprends pas quelque chose)

Était-ce utile?

La solution

Ok. Exactement ce que je veux, a été fait dans http://pypi.python.org/pypi/ RPDB / 0.1.1 .

Autres conseils

Avant de commencer l'application python

mkfifo pdb.in
mkfifo pdb.out

Alors quand pdb est appelé, vous pouvez interagir avec l'aide de ces deux commandes de chat, un en arrière-plan

cat pdb.out & cat > pdb.in

Notez le support readline ne fonctionne pas (à savoir flèche)

Je viens de croiser un problème similaire dans un cas d'utilisation beaucoup plus simple:

  • déboguer un programme simple Python en cours d'exécution à partir de la ligne de commande qui avait un fichier canalisé dans sys.stdin, ce qui signifie, aucun moyen d'utiliser la console pour pdb.

J'ai fini par résoudre en utilisant wdb .

aperçu rapide pour mon cas d'utilisation. Dans le shell, installer le serveur wdb et le client wdb:

pip install wdb.server wdb

Maintenant, lancez le serveur wdb avec:

wdb.server.py

Maintenant, vous pouvez naviguer à localhost: 1984 avec votre navigateur et voir une interface liste de tous les programmes en cours d'exécution Python. La page du projet wdb ci-dessus a des instructions sur ce que vous pouvez faire si vous voulez déboguer un de ces programmes en cours d'exécution.

En ce qui concerne un programme sous votre contrôle, vous pouvez vous pouvez le déboguer dès le début avec:

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

Ou, dans votre code, vous pouvez faire:

import wdb; wdb.set_trace()

Cela affichera une interface dans votre navigateur (si local) montrant le programme tracé.

Ou vous pouvez naviguer sur le port wdb.server.py pour voir toutes les sessions de débogage en cours au-dessus de la liste des programmes en cours d'exécution Python, que vous pouvez ensuite utiliser pour accéder à la session de débogage spécifique que vous voulez.

Notez que les commandes pour naviguer dans le code pendant la trace sont différentes de celles standard pdb, par exemple, l'étape dans une fonction que vous utilisez .s au lieu de s et l'étape sur l'utilisation .n au lieu de n. Voir le README wdb dans le lien ci-dessus pour plus de détails.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top