繁体   English   中英

Eclipse 控制台中的 Pydev 源文件超链接

[英]Pydev source file hyperlinks in Eclipse console

当 Python 应用程序崩溃时,控制台会显示指向发生异常的源代码的超链接。 您只需单击该链接,您的源文件就会在 Eclipse 编辑器中打开。

我有自己的异常处理程序,并希望在我的应用程序崩溃时在控制台中放置指向源文件的链接。

我已经找了几次关于这方面的信息,但看不到如何做或者是否有可能。

似乎可以通过以 ':' 的形式写入控制台在 Java 中完成它 - 一个侦听器选择它并将其转换为可点击的链接。 这在 Python 中不起作用。

有任何想法吗?

如果您想在 PyDev 中放置可点击的链接,您必须按照 Python 中提供的相同方式进行操作。

即:您可以从https://github.com/fabioz/Pydev/blob/master/plugins/org.python.pydev.debug/src/org/python/pydev/debug/ui/PythonConsoleLineTracker.java看到该模式它匹配的是:

.*(File) \\\\\\"([^\\\\\\"]*)\\\\\\", line (\\\\d*).

(请注意, \\是 java 上字符串中的转义符)。

import logging, sys, os
logging.basicConfig(stream=sys.stdout, level=logging.DEBUG, format='%(message)s | \'%(name)s:%(lineno)s\'')
log = logging.getLogger(os.path.basename(__file__))

log.debug("hello logging linked to source")

以上就是你所需要的,下面是更多扩展的讨论,包括使用配置文件进行格式化和围绕 getLogger 的包装器。

2017 年 11 月 19 日添加了两个额外的正则表达式,因此日志配置中的日志格式化程序只需要包含'%(filename)s:%(lineno)s'即可创建更简洁的链接。 例子:

[formatter_customFormatter] format=%(asctime)s | %(name)s | %(levelname)s | %(message)s '%(filename)s:%(lineno)s'

然而,当从子目录调用导入的代码时,这会失败,因为文件名不包含任何路径信息。 使用%(filepath)s有效,但以打印附加到日志输出的整个绝对路径为代价,与之前的 File regex 遇到相同的问题。 但是%(name)s通常几乎完全符合您的要求,parent_dir.filename,因为通常的做法是将__name__传递给 getLogger 调用。 该怎么办?

logging.getLogger(__name__.replace(".","/") + ".py")

您还可以使用与中相同的代码围绕 getLogger 编写一个包装器

def getLogger(name): return logging.getLogger(name.replace(".","/") + ".py")

然后你对 Logger 的调用就正常了

logger = myLogger.getLogger(__name__).

一个警告是 __name__ 是运行 main 的 '__main__',因此您需要区别对待以从文件中获取链接。 一种简单的方法是将 my_filename_with_main 而不是 __name__ 传递给 getLogger。

或者可能对所有内容使用不同的包装器,如

def getLogger(name): from os import path name = path.basename(name) return logging.getLogger(name)

然后您对 Logger 的调用将是

logger = myLogger.getLogger(__file__).

然后没有特殊处理,以防文件运行为“__main__”
这是一个格式示例,名称是传递给 getLogger 的任何内容:
format=%(asctime)s | %(levelname)s | %(name)-20s | %(funcName)-10s | %(message)-35s | '%(name)s:%(lineno)s'

Fabio 于 17 年 3 月提供的链接非常有用,我将在这里重复, https://github.com/fabioz/Pydev/blob/master/plugins/org.python.pydev.debug/src/org/python /pydev/debug/ui/PythonConsoleLineTracker.java第 102 - 104 行,可以在其中找到正则表达式。

注意:PyCharm 只喜欢单引号版本(如上所示),Eclipse 没有那么特别,两者都有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM