一个可怜的Python调试器。
PySnooper-g的Python项目详细描述
pysnooper-不再使用print进行调试
pysnooper是一个穷人的调试器。
您正试图找出为什么您的python代码没有做您认为应该做的事情。您很想使用一个完整的带有断点和监视点的调试器,但现在您不必费心设置一个断点和监视点。
您想知道哪些行正在运行,哪些没有运行,以及本地变量的值是什么。
大多数人会在战略位置使用print
行,其中一些显示变量的值。
pysnooper允许您执行相同的操作,但您只需在感兴趣的函数中添加一个装饰符行,而不是仔细地绘制正确的print
行。您将获得函数的逐行播放日志,包括运行的行数、运行的时间以及更改局部变量的确切时间。
是什么使pysnooper在所有其他代码智能工具中脱颖而出?你可以在你那肮脏的、杂乱无章的企业代码库中使用它,而不必做任何设置。只需打开decorator,如下所示,并通过将其路径指定为第一个参数将输出重定向到专用日志文件。
示例
我们正在编写一个函数,通过返回一个位列表,将数字转换为二进制。让我们通过添加@pysnooper.snoop()
装饰器来窥探它:
importpysnooper@pysnooper.snoop()defnumber_to_bits(number):ifnumber:bits=[]whilenumber:number,remainder=divmod(number,2)bits.insert(0,remainder)returnbitselse:return[0]number_to_bits(6)
stderr的输出是:
Starting var:.. number = 6
15:29:11.327032 call 4 def number_to_bits(number):
15:29:11.327032 line 5 if number:
15:29:11.327032 line 6 bits = []
New var:....... bits = []
15:29:11.327032 line 7 while number:
15:29:11.327032 line 8 number, remainder = divmod(number, 2)
New var:....... remainder = 0
Modified var:.. number = 3
15:29:11.327032 line 9 bits.insert(0, remainder)
Modified var:.. bits = [0]
15:29:11.327032 line 7 while number:
15:29:11.327032 line 8 number, remainder = divmod(number, 2)
Modified var:.. number = 1
Modified var:.. remainder = 1
15:29:11.327032 line 9 bits.insert(0, remainder)
Modified var:.. bits = [1, 0]
15:29:11.327032 line 7 while number:
15:29:11.327032 line 8 number, remainder = divmod(number, 2)
Modified var:.. number = 0
15:29:11.327032 line 9 bits.insert(0, remainder)
Modified var:.. bits = [1, 1, 0]
15:29:11.327032 line 7 while number:
15:29:11.327032 line 10 return bits
15:29:11.327032 return 10 return bits
Return value:.. [1, 1, 0]
功能
如果您不容易访问stderr,可以将输出重定向到文件:
@pysnooper.snoop('/my/log/file.log')
查看一些非局部变量的值:
@pysnooper.snoop(variables=('foo.bar','self.whatever'))
显示函数调用的函数的窥探行:
@pysnooper.snoop(depth=2)
用前缀开始所有窥探线,以便轻松地为它们添加grep:
@pysnooper.snoop(prefix='ZZZ ')
安装
$ pip install pysnooper
贡献
Pull requests永远欢迎! 请编写测试并用Tox运行它们。
tox自动安装所有依赖项。您只需要安装tox本身:
$ pip install tox
列出所有运行环境tox
:
$ tox -lv
如果要对所有目标python版本运行测试,请使用pyenv来安装它们。否则,你可以跑 只有绒布和您已经安装在机器上的绒布:
# run only some environments $ tox -e flake8,pylint,bandit,py27,py36
在推送代码之前,linter和测试应该通过。他们将再次在特拉维斯·西身上执行任务。
许可证
版权所有(c)2019 Ram Rachum和合作者,根据麻省理工学院许可证发布。
我提供Development services in Python and Django和give Python workshops教人 python和相关主题。
媒体报道
Hacker News thread 以及/r/Python Reddit thread(2019年4月22日)