Eclipse控制台

时间:2017-02-25 14:27:12

标签: python eclipse debugging console pydev

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

我有自己的异常处理程序,并希望在我的应用程序崩溃时将链接放到控制台中。

我已经查了几次这方面的信息,看不出怎么做或者根本不可能。

似乎可以通过以“'”形式写入控制台来在java中完成:' - 听众将其选中并将其转换为可点击链接。这在Python中不起作用。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

如果你想在PyDev中添加可点击的链接,你必须以与Python中提供的方式相同的方式进行。

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

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

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

答案 1 :(得分:0)

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

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

但是,从子目录调用导入的代码时,此操作失败了,因为filename不包含任何路径信息。使用%(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并不是那么特别,还是可以使用。