2010-06-23 4 views
5

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

 

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», но, может быть, я чего-то не понимаю)

ответ

4

Перед началом питона приложение

mkfifo pdb.in 
mkfifo pdb.out 

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

cat pdb.out & cat > pdb.in 

Примечание поддержка Readline не делает (т.е. стрелка вверх)

1

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

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

В итоге я решил его использовать, используя wdb.

Краткая сводка для моего прецедента. В оболочке, установить как сервер WDB и WDB клиента:

pip install wdb.server wdb 

Теперь запустить сервер WDB с:

wdb.server.py 

Теперь вы можете перейти к локальной машине: 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.