跳转到主要内容

通过IRC远程协作调试Python应用程序

项目描述

https://travis-ci.org/coddingtonbear/ircpdb.svg?branch=master https://badge.fury.io/py/ircpdb.svg

Ircpdb是rpdb的一个变种,它不是通过打开一个端口并允许您通过telnet进行调试,而是连接到一个可配置的IRC频道,以便您可以远程协作调试应用程序。

import ircpdb
ircpdb.set_trace(
    channel="#debugger_hangout",
    limit_access_to=['mynickname'], # List of nicknames that are allowed access
)

默认情况下,ircpdb将自行选择一个昵称并进入您在Freenode上指定的频道,但您也可以自由配置ircpdb以连接到任何地方。

import ircpdb
ircpdb.set_trace(
    channel="#debugger_hangout",
    nickname='im_a_debugger',
    server='irc.mycompany.org',
    limit_access_to=['mynickname', 'someothernickname', 'mybestfriend'],
    port=6667,
    ssl=True,
)  # See 'Options' below for descriptions of the above arguments

当达到set_trace()时,您的脚本将“挂起”,唯一继续运行的方法是通过与连接到上述IRC频道的用户交谈来访问ircpdb。

默认情况下,调试器将使用启动它的计算机的主机名开头的用户名进入您指定的频道(在以下示例中:“MyHostname”)。要与调试器交互,只需在频道中发送以“MyHostname:”开头或简单发送“!”的消息。

例如,以下两个命令是等效的,每个命令都会显示pdb帮助屏幕(请将“MyHostname”替换为机器人选择的任何用户名)

!help
MyHostname: help

安装

pip

pip install ircpdb

选项

您可以通过一系列关键字参数或使用以下描述的单个URI字符串来指定要连接的服务器。如果您同时使用URI和关键字参数指定连接参数,则关键字参数将具有优先级。

  • uri:指定要连接的IRC服务器和频道的URI。如果您指定了URI,则无需指定以下参数,但如果您指定了任何其他参数,则它们将覆盖URI中指定的设置。有关更多信息,请参阅下面的URI格式

  • channel如果不使用URI则必填):要连接到IRC服务器上的频道的名称(以#开头)。

  • limit_access_to如果不使用URI则必填):允许与调试器交互的昵称列表。当在URI中指定时,这应是一个以逗号分隔的昵称列表。

  • nickname:连接时使用的昵称。请注意,如果此名称已被使用,将选择一个备用名称。默认使用调试器执行的计算机的计算机名。

  • server:IRC服务器的计算机名或IP地址。默认:chat.freenode.net

  • port:IRC服务器的端口号。默认:6697

  • ssl:连接到IRC服务器时使用SSL?默认:True

  • password:如果需要,则为IRC服务器设置服务器密码。默认:None

  • message_wait_seconds:机器人应在IRC上发送消息之间等待的秒数。许多服务器(包括Freenode)都会将发送过多消息的客户端踢出。默认:0.8秒。

  • dpaste_minimum_response_length:尝试将长度为这个长度或更长的消息发布到dpaste,而不是通过IRC逐行发送。如果您连接的服务器对每分钟客户端可以发送的行数有非常严格的限制,则此参数很有用。默认:10行。

  • activation_timeout:在断开连接并继续执行之前,等待此秒数,以便有人在频道中与调试器交互。默认:60秒。

通过环境变量设置默认设置

您可以通过设置环境变量DEFAULT_IRCPDB_URI来指定默认连接参数,该URI与以下描述的格式相匹配的URI。

URI格式

示例

irc+ssl://botnickname@ircserverhostname:6667/#mychannel?limit_access_to=mynickname

这是一种用于指定IRC连接参数的快捷格式;大致遵循以下格式

irc[+<ssl?>]://[[<nickname>][:<password>]@]<hostname>[:<port>]/<channel>

上述选项中提到的所有其他参数都可以指定为查询字符串参数。

请注意,这与标准URI不同,您应包括频道名称开头的#字符,并且是未转义的。

在Django模板中使用

在您的settings.py中,将ircpbd.django添加到您的已安装应用中

INSTALLED_APPS = [
    # Other apps
    # ...
    'ircpdb.django',
]

在您想添加调试器跟踪的模板中,通过在模板顶部添加以下内容来加载ircpdb模板标签

{% load ircpdb %}

然后,在您想注入ircpdb跟踪的地方

{% set_trace channel='#my_channel' limit_access_to='coddingtonbear' %}

下次渲染此模板(可能通过访问使用它的视图)时,渲染将在您放置跟踪的位置停止,ircpdb 机器人将出现在您的频道中。

安全免责声明

此库的工作方式本质上是危险的;鉴于您可以从调试器中执行任意 Python 代码,强烈建议您采取所有合理的措施以确保您控制谁能够执行调试器命令。

为了尽可能降低风险,您应考虑以下步骤

  • 始终使用支持 SSL 的 IRC 服务器(也就是说,将 ssl 参数设置为默认值:True)。

  • 连接到您或您所在公司拥有的 IRC 服务器,而不是 Freenode(默认)。

为了确保这一点非常明确:您需要负责确定您能接受的危险级别,并采取适当的行动来减轻风险。

正如库的许可证中明确且响亮地声明的(见包含的 LICENSE.txt

THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.

祝您好运,调试愉快!

故障排除

如果您看不到机器人进入您指定的频道,请尝试通过在跟踪上方添加以下行来增加日志级别,以收集更多关于连接到 IRC 服务器时可能发生的问题的信息

import logging
logging.basicConfig(filename='/path/to/somewhere.log', level=logging.DEBUG)

作者

Adam Coddington <me@adamcoddington.net> - http://adamcoddington.net/

此库是 rpdb 的分支,此库的基础归功于 Bertrand Janin <b@janin.com> - http://tamentis.com/ 以及所有其他对 rpdb <https://github.com/tamentis/rpdb> 的贡献者,包括以下人员

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分发

ircpdb-1.8.1.tar.gz (14.5 kB 查看哈希值)

上传时间

由以下赞助

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面