Запустите pdb без stdin / stdout, используя FIFO - PullRequest
5 голосов
/ 23 июня 2010

Я занимаюсь разработкой файловой системы FUSE с python.Проблема в том, что после монтирования файловой системы у меня нет доступа к stdin / stdout / stderr из моего скрипта fuse.Я ничего не вижу, даже следы.Я пытаюсь запустить pdb так:


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

Все работает нормально, но очень неудобно.Я хочу сделать pdb.in и pdb.out как файлы fifo, но не знаю, как правильно их подключить.В идеале я хочу набирать команды и видеть вывод в одном терминале, но буду рад даже двум терминалам (в одном положите команды и увидите вывод в другом).Вопросы:

1) Это лучший / другой способ запустить pdb без stdin / stdout?

2) Как я могу перенаправить stdin в pdb.in fifo (Все, что я печатаю, должно идти наpdb.in)?Как я могу перенаправить pdb.out в stdout (у меня были странные ошибки с «cat pdb.out», но, возможно, я чего-то не понимаю)

Ответы [ 3 ]

6 голосов
/ 30 июня 2010

Хорошо. Именно то, что я хочу, было сделано в http://pypi.python.org/pypi/rpdb/0.1.1.

4 голосов
/ 01 сентября 2012

Перед запуском приложения python

mkfifo pdb.in
mkfifo pdb.out

Затем, когда вызывается pdb, вы можете взаимодействовать с ним с помощью этих двух команд cat, одна работает в фоновом режиме

cat pdb.out & cat > pdb.in

Обратите внимание, что поддержка readline не работает (т.е. стрелка вверх)

1 голос
/ 31 марта 2016

Я только что столкнулся с подобной проблемой в гораздо более простом сценарии использования:

  • отладка простой программы на Python, запущенной из командной строки, в которой файл был передан в sys.stdin, то есть нетспособ использования консоли для pdb.

В итоге я решил ее с помощью wdb .

Быстрое краткое изложение для моего сценария использования.В оболочке установите сервер wdb и клиент wdb:

pip install wdb.server wdb

Теперь запустите сервер wdb с помощью:

wdb.server.py

Теперь вы можете перейти к localhost: 1984 с помощью браузера.и увидеть интерфейс со списком всех запущенных программ на Python.На странице проекта wdb, приведенной выше, есть инструкции о том, что вы можете сделать, если хотите отладить любую из этих запущенных программ.

Что касается программы, находящейся под вашим контролем, вы можете отладить ее с самого начала с помощью:

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

Или, в вашем коде, вы можете сделать:

import wdb; wdb.set_trace()

Это откроет интерфейс в вашем браузере (если он локальный), показывающий отслеживаемую программу.

Или вы можете перейти к порту wdb.server.py, чтобы увидеть все текущие сеансы отладки в верхней части списка запущенных программ Python, которые затем можно использовать для доступа к конкретному сеансу отладки, который вы хотите.

Обратите внимание, чтоКоманды для навигации по коду во время трассировки отличаются от стандартных pdb, например, чтобы войти в функцию, которую вы используете .s вместо s, и чтобы перешагнуть через .n вместо n,Подробнее см. wdb README по ссылке выше.

...