Python调试有助于编程环境的完善

开发 后端
Python调试需要我们十分认真的进行。因为这是在组建之后最后的一道工序,能否顺利的完成还是需要我们进行相关的调试。

Python调试在很多的时候都需要我们去做,当然在使用的过程中会出现各种的状况。下面我们就来详细的看下如何进行有关Python的环境调试。希望大家有所收获。

据闻winpdb、Wing IDE的调试器能够支持这样的远程调试,但似乎过于重量级(好吧前者比后者要轻多了,但一样要wx Python调试的环境,再说pdb的灵活可靠它们难以比拟)。

其实只需稍作改动即可用pdb继续Python调试子进程的代码,思路来自这个博客:子进程的stdin/out/err关闭了,那可以自己重新按/dev/stdout的名称打开来用。当然这指*nix下,win下要麻烦一些,后面再说。

pdb支持自定义输出输入的文件,我再稍作改动,使用fifo管道(Named Pipe)来完成pdb的输出输入的重定向,这样的好处是,可以同时对父子进程调试!

 

  1. multiproces_debug.py  
  2. #!/usr/bin/python  
  3. import multiprocessing  
  4. import pdb  
  5. def child_process():  
  6. print "Child-Process"  
  7. pdb.Pdb(stdin=open('p_in', 'r+'), stdout=open('p_out', 
    'w+')).set_trace()  
  8. var = "debug me!" 
  9. def main_process():  
  10. print "Parent-Process"  
  11. p = multiprocessing.Process(target = child_process)  
  12. p.start()  
  13. pdb.set_trace()  
  14. var = "debug me!" 
  15. p.join()  
  16. if __name__ == "__main__":  
  17. main_process()  

 

只需要给pdb的构造参数传入stdin/stdout的文件对象,调试过程的输出输入就自然以传入的文件为方向了。这里需要两个管道文件p_in、p_out,运行脚本之前,使用命令mkfifo p_in p_out同时建立。这还未完成,还需要个外部程序来跟管道交互:

  1. #!/bin/bash  
  2. cat p_out &  
  3. while [[ 1 ]]; do  
  4. read -e cmd  
  5. echo $cmd>p_in  
  6. done  

很简单的bash。因为fifo管道在写入端未传入数据时,读取端是阻塞的(反之亦然),所以cat的显示挂在后台,当调试的程序结束后,管道传出EOF,cat就自动退出了。

实验开始:先在一个终端运行debug_cmd.sh(其实顺序无关),其光标停在新的一行,再在另外一个终端运行multiproces_debug.py,可见到两个终端同时出现了(Pdb)的指示符,可以同时对父子进程调试了!以上就是对Python调试的相关介绍。

【编辑推荐】

  1. Python循环如何解决无限循环
  2. Python编程不同于其他编程语言的优点
  3. Python安装配置的基本步骤详解
  4. Python图像处理的好处所在
  5. Python函数式和Ruby的相关技术比较
责任编辑:张浩 来源: IT168
相关推荐

2024-04-11 11:36:26

数据中心公共云计算IT企业

2022-10-08 08:38:32

物联网

2019-11-19 12:40:36

AI人工智能开源工具

2021-11-26 05:14:44

开源数据库安全漏洞

2021-06-10 09:34:24

前端开发工具开发

2011-03-22 13:36:21

数据创建安全环境

2011-12-09 09:31:58

桌面虚拟化

2020-03-25 20:19:43

人工智能技术智能机器

2021-08-13 10:33:55

IT经理首席信息官CIO

2019-11-18 11:07:13

人工智能技术Apache

2020-02-05 13:03:55

数据中心混合云技术

2013-07-17 09:19:23

2023-06-09 19:03:35

开源组织

2017-04-14 10:40:43

SDS系统选择

2020-03-23 09:31:51

JavaScript函数技术

2019-08-12 07:39:25

数据中心IT开销

2022-09-21 14:12:33

大数据医疗保健

2014-04-15 10:07:22

大数据

2017-09-06 15:53:55

机器学习人工智能框架

2010-06-11 22:20:27

点赞
收藏

51CTO技术栈公众号