diff options
author | Barry Warsaw <barry@python.org> | 1999-09-09 16:32:41 (GMT) |
---|---|---|
committer | Barry Warsaw <barry@python.org> | 1999-09-09 16:32:41 (GMT) |
commit | 2bee8feac614599d172ea4483a17294b81063fdc (patch) | |
tree | 79dce4028f7268534fa3bf874d94a75f8b0a751f /Lib/pdb.py | |
parent | a2e48552d28721eec0df75912d479f7d44c14d0a (diff) | |
download | cpython-2bee8feac614599d172ea4483a17294b81063fdc.zip cpython-2bee8feac614599d172ea4483a17294b81063fdc.tar.gz cpython-2bee8feac614599d172ea4483a17294b81063fdc.tar.bz2 |
Pdb.lineinfo(): Don't use os.popen('egrep ...') to find the line in
the file that a function is defined on. Non-portable to Windows and
JPython. Instead, new find_function() uses re module on a similar
(simple-minded) pattern.
Diffstat (limited to 'Lib/pdb.py')
-rwxr-xr-x | Lib/pdb.py | 31 |
1 files changed, 23 insertions, 8 deletions
@@ -11,6 +11,27 @@ import cmd import bdb import repr import os +import re + +def find_function(funcname, filename): + cre = re.compile(r'def\s+%s\s*[(]' % funcname) + try: + fp = open(filename) + except IOError: + return None + # consumer of this info expects the first line to be 1 + lineno = 1 + answer = None + while 1: + line = fp.readline() + if line == '': + break + if cre.match(line): + answer = funcname, filename, lineno + break + lineno = lineno + 1 + fp.close() + return answer # Interaction prompt line will separate file and call info from code @@ -26,7 +47,6 @@ class Pdb(bdb.Bdb, cmd.Cmd): bdb.Bdb.__init__(self) cmd.Cmd.__init__(self) self.prompt = '(Pdb) ' - self.lineinfoCmd = 'egrep -n "def *%s *[(:]" %s /dev/null' self.aliases = {} # Try to load readline if it exists try: @@ -283,13 +303,8 @@ class Pdb(bdb.Bdb, cmd.Cmd): if f: fname = f item = parts[1] - grepstring = self.lineinfoCmd % (item, fname) - answer = os.popen(grepstring, 'r').readline() - if answer: - f, line, junk = string.split(answer, ':', 2) - return(item, f,line) - else: - return failed + answer = find_function(item, fname) + return answer or failed def checkline(self, filename, lineno): """Return line number of first line at or after input |