Python调试终端

作者: fasionchan | 来源:发表于2016-12-09 18:52 被阅读244次

    后端服务程序开发运营过程中,难免会遇到一些BUG疑难杂症,是日志输出等调试手段无法定位的。
    如有有一个工具,可以连上服务程序,查询服务中间状态或者修改程序变量,势必加速问题定位及解决。

    本模块就是您想要的工具~

    安装

    模块代码已经在github上开源:libase.server.console,可以直接把代码clone下来安装。

    $ git clone https://github.com/fasionchan/libase.git
    $ cd libase
    $ python setup.py install
    

    当然了,libase也已经发布到PyPI上了。因此,更方便的安装方式是使用pip

    pip install libase
    

    服务接入

    需要远程调试的程序可以用start_console_server快捷启动一个远程调试终端服务。
    然后,使用pyconsole命令便可以连上该程序,并初始化一个Python控制台用于调试了。

    import time
    
    from libase.server.console import start_console_server
    
    counter = 0
    
    start_console_server()
    
    while True:
        print counter
        counter += 1
        time.sleep(1)
    

    例子是一个计算程序,使用start_console_server接入远程调试终端服务,端口为默认值4444

    连接调试

    libase提供一个用于连接远程调试终端的程序pyconsole,以访问上述程序为例:

    $ pyconsole 4444
    Python 2.7.3 (default, Jan  2 2013, 13:56:14)
    [GCC 4.7.2] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    (ConsoleProxy)
    >>> print main.counter
    93
    >>> main.counter = 0
    >>> print main.counter
    1
    >>> print main.counter
    2
    

    注意到,默认已经将进程的__main__模块引入到当前名字空间,名为main,其效果等同于在pyconsole中执行import __main__ as main

    高级用法

    接口文档

    start_console_server

    start_console_server(port=4444, addr='localhost', 'code'='')

    接入远程调试终端服务,返回一个ConsoleServer对象。

    • port 远程调试终端服务监听的端口,默认为4444
    • addr 远程调试终端服务监听的地址,可以为IP或者机器名,默认为localhost
    • code 初始化代码,可用于预先引入一些对象到终端所在名字空间

    run_console_proxy

    run_console_proxy(port=4444, addr='localhost')

    以给定地址端口信息,连上接入远程调试终端的服务,并启动一个Python控制台。

    • port 远程调试终端所在端口,默认为4444
    • addr 远程调试中断所在机器地址,可以是IP或者机器名,默认为localhost

    工具命令

    pyconsole

    用法:pyconsole [port] [addr]

    • port 远程调试终端所在端口,默认为4444
    • addr 远程调试中断所在机器地址,可以是IP或者机器名,默认为localhost

    该命令,只是把run_console_proxy命令化,实现如下:

    import sys
    import rlcompleter
    
    from libase.server.console import run_console_proxy
    
    if __name__ == '__main__':
        run_console_proxy(*sys.argv[1:])
    

    相关文章

      网友评论

      本文标题:Python调试终端

      本文链接:https://www.haomeiwen.com/subject/laqymttx.html