top button
Flag Notify
    Connect to us
      Site Registration

Site Registration

settrace doesn't trace builtin functions in python

0 votes
276 views

I've been using the settrace function to write a tracer for my program, which is working great except that it doesn't seem to work for built-in functions, like open('filename.txt'). This doesn't seem to be documented, so I'm not sure if I'm doing something wrong or that's the expected behavior.

If settrace's behavior in this regard is fixed, is there any way to trace calls to open()? I don't want to use Linux's strace, as it'll run for whole program (not just the part I want) and won't show my python line numbers/file names, etc. The other option I considered was monkey-patching the open function through a wrapper, like:

def wrapped_open(*arg,**kw):
 print 'open called'
 traceback.print_stack()
 f = __builtin__.open(*arg,**kw)
 return f
open = wrapped_open

but that seemed very brittle to me. Could someone suggest a better way of doing this?

posted Jul 1, 2013 by anonymous

Looking for an answer?  Promote on:
Facebook Share Button Twitter Share Button LinkedIn Share Button

Similar Questions
0 votes

I have this innocent and simple code:

from collections import deque
exhaust_iter = deque(maxlen=0).extend
exhaust_iter.__doc__ = "Exhaust an iterator efficiently without caching any of its yielded values."

Obviously it does not work. Is there a way to get it to work simply and without creating a new scope (which would be a rather inefficient a way to set documentation, and would hamper introspection)?

How about dropping the "simply" requirement?

0 votes

I'm writing a custom profiler that uses sys.settrace. I was wondering if there was any way of tracing the assignments of variables inside a function as its executed, without looking at locals() at every single line and comparing them to see if anything has changed.

Sort of like xdebug's collect_assignments parameter in PHP.

+1 vote

I am confused about how various built-in functions are called. Some are called with dot notation

each_item.isalpha()

and some are called like 'normal'

sum(numlist)

How do you know/remember which way to call them?

+3 votes

Is the byteorder (or endianness) of the functions in the audioop module somewhere specified or does anyone know how it behaves on different systems?

On my little-endian system it matches the system's endianness:

>>> import sys, audioop
>>> sys.byteorder
'little'
>>> audioop.lin2lin(b'xff', 1, 2)
b'x00xff'
...