2015-03-26 2 views
1

У меня есть код python со многими вызовами подпроцесса (например, subprocess.check_call()). По-видимому, он не может отлаживаться в подпроцессе.Использовать pdb для отладки в подпроцесс?

Есть ли способ (например, добавление кода), чтобы сделать это, или я должен использовать другой отладчик?

+1

Является ли вызванный процесс написанным на python? Вы перенаправляете stdout/stderr? Как насчет того, чтобы просто распечатать командную строку и запустить через отладчик сбоку? – tdelaney

+0

Да, и да. Я сделал изменения, на которые вы намекали, и теперь я могу отлаживать вызванную процедуру; см. мой ответ ниже. – user1071847

ответ

0

Вам нужно будет пройти через код, если у вас есть pdb. Если у вас есть исходные файлы, оставьте точку останова в интересующей вас строке и используйте pdb для автоматического остановки в интересующей вас строке.

Это то, что мы делаем в .net. Надеемся, что она должна работать на питоне тоже ..

+1

Это будет 'pdb.set_trace()', но он будет работать, только если OP не перенаправляет stdout. – tdelaney

+0

@tdelaney: Вы правы. Все, что мне нужно было сделать, это остановить перенаправление stdout. Благодаря! – user1071847

2

Оказывается препятствием было то, что код вызова подпроцесс также перенаправлен стандартный вывод:

subprocess.call(["called_program", 
    "-q", num_processes, 
    "-k", yaml_key], 
    stdout=logfile, 
    stderr=subprocess.STDOUT) 

Per комментарий tdelaney, я удалила редиректы и поставить точку останова в called_program.py. Теперь я могу использовать pdb в этом модуле.

Смежные вопросы