Python的远程调试指南

简要介绍:由于自动化脚本通常是部署在远程的执行机上执行的,所以我们经常会遇到在本地A机器上调试代码通过,但是放在远程的机器B上运行就会失败。本文所将的内容就是如何设置python的remotedebugger从而做到在本地A机器上通过远程调试工具调试远程B机器上的脚本。

设置方法

配置Komodo的环境:

  • Step1:在Edit菜单中选择Preferences
    Python的远程调试指南_第1张图片

  • Step2:在打开Preferences对话框中选择languages,选择python并设置python路径。(本例中我的python安装在D:\python24下,所以我选择的内容如下图)
    Python的远程调试指南_第2张图片

  • Step3:设置完毕后点击OK关闭。

在远程机器(被调试机器上)安装Remotedebugger:

  • Step1:查看远程机器上是否包含loggin组件,查看方法:

在命令行cmd下输入如下命令,验证返回内容为”OK”

python -c "import logging; print 'ok'"

Python的远程调试指南_第3张图片
如果以上步骤显示”OK”则继续下一步骤,否则请排查问题原因。

  • Step2:在远程机器上下载并安装Komodo-PythonRemoteDebugging package:
    • 访问http://code.activestate.com/komodo/remotedebugging/
    • 根据本地使用的komodo版本和操作系统类型选择相应的版本下载。(实例中我使用的是komodo7,所以下载了相应在windows下的组件)
    • 解压下载后的zip文件,如图:
      Python的远程调试指南_第4张图片
  • Step3:将图中除bin文件之外的所有文件(如图中所示),拷贝到远程机器的python库文件目录,即:python安装\\lib\\site-packages目录下
    Python的远程调试指南_第5张图片

    示例中,远程机器的python安装目录为c:\python24,所以dbgp拷贝的目录为C:\Python24\Lib\site-packages

  • Step4:测试远程机器上的dbgp是否安装成功,测试方法:
    在命令行中输入

python -c "import dbgp.client; print 'ok'"

Python的远程调试指南_第6张图片
如果显示OK,则继续下一步骤,否则请排查原因。

  • Step5: 拷贝解压目录中的bin目录到远程机器上一个方便的文件夹。
    Python的远程调试指南_第7张图片

将图中的bin目录拷贝的远程机器中的任意一个方便的路径,例如D:\bin目录

  • Step6: 在远程机器的环境变量PATH中增加该bin目录。例如上述步骤我们拷贝bin目录到D:\bin,则在环境变量PATH中增加D:\bin;
    Python的远程调试指南_第8张图片
  • Step7: 在远程机器环境变量的PATHEXT中增加.PY
    Python的远程调试指南_第9张图片

  • Step8: 测试远程机器上的环境配置情况,测试方法:
    在命令行中输入

pydbgp --help

配置正确的话,会显示如下图所示
Python的远程调试指南_第10张图片

进行脚本的远程调试:

  • Step1:在本地环境查看debugger connection是连接中,查看方法:确保debug下的listen for debugging connection是勾选状态
    Python的远程调试指南_第11张图片

  • Step2:查看本机的ip地址(ipconfig)

  • Step3:查看本机的端口号,查看方法:打开debug->listener status
    Python的远程调试指南_第12张图片

    hostport端口号可以在komodo的设置功能中调整,默认采用的是9000

  • Step4: 登录到远程机器上,将要调试的脚本拷贝的远程机器上

    例如:我们将如下测试脚本命名为GetSystemInfo.py,并拷贝到远程机器的D:\script目录下

#!/usr/bin/env python
#coding=utf-8
import os
import socket

homedir = os.getcwd()
appdatadir = os.getenv("APPDATA")
myname = socket.getfqdn(socket.gethostname(  ))
print "homedir=" + homedir
print "appdatadir=" + appdatadir
print "ComputeName=" + myname
#myaddr = socket.gethostbyname(myname)
#print myaddr
  • Step5: 在远程机器上运行pydbgp命令行,命令行格式为:
pydbgp -d localhost:9000 your-script.py

本例中,调试工具所在机器IP地址为10.129.157.108,远程机器上脚本所在路径为D:\script\GetSystemInfo.py,所以在远程机器上运行的命令行为:

pydbgp -d 10.129.157.108:9000 GetSystemInfo.py
  • Step6: 运行以上命令后,本机调试工具komodo会提示远程脚本与本地脚本需要做关联,在对话框中选择本地对应的脚本即可。

    注意:调试的时候需要确保本地脚本与远程机器脚本一致,否则断点所在行是错乱的)

  • Step7: 最后就可以单步调试了。看一下实例中的效果吧:

    GetSystemInfo.py是一个获取本地机器名、脚本所在路径和appdata路径的脚本。

当这个脚本在本地机器A上运行时,提示内容为:
Python的远程调试指南_第13张图片

当这个脚本远程运行在B机器上,但是在A机器上调试时,提示内容为:
Python的远程调试指南_第14张图片

你可能感兴趣的:(Python)