2012-08-03 26 views
9

Muszę jak zwykle uruchomić skrypt Python, ale chcę zatrzymać wykonywanie w określonej linii i uruchomić tryb interaktywny.Uruchom tryb interakcyjny na określonej linii skryptu

Innymi słowy, chcę być w stanie sprawdzić wartość wszystkich moich zmiennych w tym punkcie, i kontynuować od tego miejsca w linii poleceń Pythona.

Jak mogę to zrobić?

+0

A.k.a tryb debugowania? –

+0

Jeśli tryb debugowania jest opisany powyżej, to tak! –

+0

Dopóki próbujesz debugować swój kod, metody w odpowiedziach są takie, jak powinieneś. Jeśli rzeczywiście potrzebujesz tego rodzaju funkcji jako użytkownik, a nie jako twórca skryptu, powinieneś zastanowić się, w jaki sposób wprowadzić dane użytkownika podczas wykonywania skryptu lub reorganizacji kodu w funkcjach, metodach i modułach. –

Odpowiedz

16

Można to zrobić za pomocą modułu code. Najprostszym sposobem jest wywołanie code.interact().

+0

Czy jesteś pewien? Wygląda tylko na to, że otwiera powłokę Pythona i to wszystko. Nie mogę wyszukać żadnych zmiennych, które zdefiniowałem przed 'code.interact()' w moim kodzie, więc naprawdę nie widzę sposobu korzystania z tej funkcji. –

+3

@Ricky Musisz użyć argumentu 'local':' code.interact (local = locals()) '. –

+1

@lazyr faktycznie, to 'code.interact (local = locals())' :-) – sloth

9

Użyj debuggera i dodaj punkty przerwania. Czy korzystasz z IDE? Wszystkie główne IDE mają wsparcie dla debuggera. Z interfejsu CLI można korzystać z pdb.

+4

'import pdb; pdb.set_trace() 'zrobi lewy. –

4

Nie dokładnie to, czego szukasz, ale łatwo można mieć program wyrwać do WPB (debugera Python) poprzez dodanie tej linii gdzie chcesz program, aby wyrwać się:

import pdb; pdb.set_trace() 

You można wtedy łatwo sprawdzić zmienne tak:

p variable_name 

można również krok, nadal itd

Więcej szczegółów na WPB here.

2

ile trzeba to do celów produkcyjnych najlepszy sposób, moim zdaniem, jest wykorzystanie interaktywnego debuggera:

http://infohost.nmt.edu/tcc/help/pubs/python/web/pdb.html

http://onlamp.com/pub/a/python/2005/09/01/debugger.html

do innych celów rozważyć może robić aspekty na kodzie, przy użyciu dekoratorów, aby uzyskać charakterystykę wykonawczą z klasy metod:

http://www.cs.tut.fi/~ask/aspects/index.shtml

http://www.linuxtopia.org/online_books/programming_books/python_programming/python_ch26.html

Powiązane problemy