将代码链接打印到PyCharm控制台

时间:2014-10-10 13:27:38

标签: python-3.x pycharm

我目前正在为PyCharm中的Django-Application编写一些复杂的测试。因此,我在控制台上使用了所有那些奇特的颜色,这可以通过打印一些特殊代码来实现。

我现在想知道是否也可以在控制台中打印特定代码行的超链接。对于每个堆栈跟踪PyCharm为所有文件生成这样的链接,但是我可以自己做吗?

直接从测试输出跳转到特定行,而不是手动导航到,这将非常有用。

2 个答案:

答案 0 :(得分:1)

功能:print_link(file, line)

Frieder's answer的帮助下,我创建了print_link,可让您轻松地在PyCharm控制台中创建链接。它使用内置的inspect模块为fileline创建默认值,以指向调用它的行。

import inspect

def print_link(file=None, line=None):
    """ Print a link in PyCharm to a line in file.
        Defaults to line where this function was called. """
    if file is None:
        file = inspect.stack()[1].filename
    if line is None:
        line = inspect.stack()[1].lineno
    string = f'File "{file}", line {max(line, 1)}'.replace("\\", "/")
    print(string)
    return string
# Default to this line and file (randomtesting.py in generallibrary, line 14)
print_link()

# Link relatively to another repository through parent's directory
print_link("../generalvector/generalvector/vector.py", 23)

# Link relatively to README which is in same directory as randomtesting.py
print_link("README.md", 1)

# Link absolutely to any file
print_link("A:/hello.txt", 1)

print_link

蓝色文本表示链接成功。

功能:print_link_to_obj(obj)

在前一个功能的基础上,我们可以创建print_link_to_obj来轻松动态地创建指向任何对象的链接,这些对象的源代码可用于inspect

def print_link_to_obj(obj):
    """ Print a link in PyCharm to a module, function, class, method or property. """
    if isinstance(obj, property):
        obj = obj.fget
    file = inspect.getfile(obj)
    line = inspect.getsourcelines(obj)[1]
    print_link(file=file, line=line)
# Create a link to definition above
print_link_to_obj(print_link)

# Create a link to entire inspect module
print_link_to_obj(inspect)

# Create a link to a function in inspect
print_link_to_obj(inspect.stack)

# Create a link to a property in a class in inspect
print_link_to_obj(inspect.BoundArguments.args)

print_link_to_obj

包装:generallibrary PyPI pyversions

如果您不想复制粘贴功能,请安装我的跨平台软件包:

pip install generallibrary
from generallibrary import print_link, print_link_to_obj

答案 1 :(得分:0)

我想这有点晚了,我不是100%满意,但它确实有效(至少在PyCharm 2019.2中)。如果您以

格式打印一行
File "{file_path}", line {line_number}

然后PyCharm将自动将此行转换为指向相应文件和行的链接。例如:

print("File \"C:/Workspace/enventa-next/suites/suite_standard/tst_Inventur/test.py\", line 3")

将跳转到或打开文件,然后将焦点移到第三行。 我认为无法与自定义内容建立链接。