summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1995-09-30 16:48:54 (GMT)
committerGuido van Rossum <guido@python.org>1995-09-30 16:48:54 (GMT)
commit4f399fb6429d7f84de1f881f1fc3968619d9af2e (patch)
tree5cbf0ea3a1fb8205b8d405704caa36834a2a7d03
parent59c473be9914ef78a4f213174e0e9f1ae910f2f6 (diff)
downloadcpython-4f399fb6429d7f84de1f881f1fc3968619d9af2e.zip
cpython-4f399fb6429d7f84de1f881f1fc3968619d9af2e.tar.gz
cpython-4f399fb6429d7f84de1f881f1fc3968619d9af2e.tar.bz2
more robust coding, adapted for mac
-rwxr-xr-xLib/profile.py35
-rw-r--r--Lib/pstats.py11
2 files changed, 23 insertions, 23 deletions
diff --git a/Lib/profile.py b/Lib/profile.py
index baa95e1..715aa4b 100755
--- a/Lib/profile.py
+++ b/Lib/profile.py
@@ -43,11 +43,10 @@ import marshal
# Global variables
func_norm_dict = {}
func_norm_counter = 0
-pid_string = `os.getpid()`
-
-
-# Optimized intermodule references
-ostimes = os.times
+if hasattr(os, 'getpid'):
+ pid_string = `os.getpid()`
+else:
+ pid_string = ''
# Sample timer for use with
@@ -137,7 +136,7 @@ def help():
#**************************************************************************
class Profile:
- def __init__(self, *arg):
+ def __init__(self, timer=None):
self.timings = {}
self.cur = None
self.cmd = ""
@@ -148,18 +147,22 @@ class Profile:
'exception': self.trace_dispatch_exception, \
}
- if not arg:
- self.timer = os.times
- self.dispatcher = self.trace_dispatch
+ if not timer:
+ if hasattr(os, 'times'):
+ self.timer = os.times
+ self.dispatcher = self.trace_dispatch
+ else:
+ self.timer = time.time
+ self.dispatcher = self.trace_dispatch_i
else:
- self.timer = arg[0]
+ self.timer = timer
t = self.timer() # test out timer function
try:
if len(t) == 2:
self.dispatcher = self.trace_dispatch
else:
- self.dispatcher = self.trace_dispatch_r
- except:
+ self.dispatcher = self.trace_dispatch_l
+ except TypeError:
self.dispatcher = self.trace_dispatch_i
self.t = self.get_time()
self.simulate_call('profiler')
@@ -373,9 +376,9 @@ class Profile:
return func_norm_dict[func_name]
if type(func_name) == type(""):
long_name = string.split(func_name)
- file_name = long_name[6][1:-2]
+ file_name = long_name[-3][1:-2]
func = long_name[2]
- lineno = long_name[8][:-1]
+ lineno = long_name[-1][:-1]
if '?' == func: # Until I find out how to may 'em...
file_name = 'python'
func_norm_counter = func_norm_counter + 1
@@ -398,7 +401,7 @@ class Profile:
def runctx(self, cmd, globals, locals):
self.set_cmd(cmd)
- sys.setprofile(self.trace_dispatch)
+ sys.setprofile(self.dispatcher)
try:
exec cmd in globals, locals
finally:
@@ -407,7 +410,7 @@ class Profile:
# This method is more useful to profile a single function call.
def runcall(self, func, *args):
self.set_cmd(`func`)
- sys.setprofile(self.trace_dispatch)
+ sys.setprofile(self.dispatcher)
try:
apply(func, args)
finally:
diff --git a/Lib/pstats.py b/Lib/pstats.py
index 5a4601a..e87478e 100644
--- a/Lib/pstats.py
+++ b/Lib/pstats.py
@@ -116,13 +116,10 @@ class Stats:
except: # in case this is not unix
pass
self.files = [ arg ]
- elif type(arg) == type(self):
- try:
- arg.create_stats()
- self.stats = arg.stats
- arg.stats = {}
- except:
- pass
+ elif hasattr(arg, 'create_stats'):
+ arg.create_stats()
+ self.stats = arg.stats
+ arg.stats = {}
if not self.stats:
raise TypeError, "Cannot create or construct a " \
+ `self.__class__` \