Python可以生成类似于bash的set -x的跟踪吗?

前端之家收集整理的这篇文章主要介绍了Python可以生成类似于bash的set -x的跟踪吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Python中是否有类似的机制,-b对bash有效果

以下是此模式下bash的一些示例输出

  1. + for src in cpfs.c log.c popcnt.c ssse3_popcount.c blkcache.c context.c types.c device.c
  2. ++ my_mktemp blkcache.c.o
  3. +++ mktemp -t blkcache.c.o.2160.XXX
  4. ++ p=/tmp/blkcache.c.o.2160.IKA
  5. ++ test 0 -eq 0
  6. ++ echo /tmp/blkcache.c.o.2160.IKA
  7. + obj=/tmp/blkcache.c.o.2160.IKA

我知道Python trace模块,但它的输出似乎非常冗长,而不是像bash那样高级.

解决方法

也许使用 sys.settrace

使用traceit()打开跟踪,使用traceit(False)关闭跟踪.

  1. import sys
  2. import linecache
  3.  
  4. def _traceit(frame,event,arg):
  5. '''
  6. http://www.dalkescientific.com/writings/diary/archive/2005/04/20/tracing_python_code.html
  7. '''
  8. if event == "line":
  9. lineno = frame.f_lineno
  10. filename = frame.f_globals["__file__"]
  11. if (filename.endswith(".pyc") or
  12. filename.endswith(".pyo")):
  13. filename = filename[:-1]
  14. name = frame.f_globals["__name__"]
  15. line = linecache.getline(filename,lineno)
  16. print "%s # %s:%s" % (line.rstrip(),name,lineno,)
  17. return _traceit
  18.  
  19. def _passit(frame,arg):
  20. return _passit
  21.  
  22. def traceit(on=True):
  23. if on: sys.settrace(_traceit)
  24. else: sys.settrace(_passit)
  25.  
  26. def mktemp(src):
  27. pass
  28.  
  29. def my_mktemp(src):
  30. mktemp(src)
  31. p=src
  32.  
  33. traceit()
  34. for src in ('cpfs.c','log.c',):
  35. my_mktemp(src)
  36. traceit(False)

产量

  1. mktemp(src) # __main__:33
  2. pass # __main__:30
  3. p=src # __main__:34
  4. mktemp(src) # __main__:33
  5. pass # __main__:30
  6. p=src # __main__:34
  7. if on: sys.settrace(_traceit) # __main__:26
  8. else: sys.settrace(_passit) # __main__:27

猜你在找的Python相关文章