我目前正在为PyCharm中的Django-Application编写一些复杂的测试。因此,我在控制台上使用了所有那些奇特的颜色,这可以通过打印一些特殊代码来实现。
我现在想知道是否也可以在控制台中打印特定代码行的超链接。对于每个堆栈跟踪PyCharm为所有文件生成这样的链接,但是我可以自己做吗?
直接从测试输出跳转到特定行,而不是手动导航到,这将非常有用。
答案 0 :(得分:1)
print_link(file, line)
在Frieder's answer的帮助下,我创建了print_link
,可让您轻松地在PyCharm控制台中创建链接。它使用内置的inspect模块为file
和line
创建默认值,以指向调用它的行。
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_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)
generallibrary
如果您不想复制粘贴功能,请安装我的跨平台软件包:
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")
将跳转到或打开文件,然后将焦点移到第三行。 我认为无法与自定义内容建立链接。