Python 运行脚本。@SaladHead通过尝试解析文件的内容来完成,这可能在大多数情况下(如果不是所有情况下)都有效-就个人而言,我对用正则表达式解析脚本有点怀疑。就执行代码而言,大多数模块在导入时不会打印内容(原因很明显)。问题是软件开发人员无法控制脚本的编写,
Python 运行脚本。@SaladHead通过尝试解析文件的内容来完成,这可能在大多数情况下(如果不是所有情况下)都有效-就个人而言,我对用正则表达式解析脚本有点怀疑。就执行代码而言,大多数模块在导入时不会打印内容(原因很明显)。问题是软件开发人员无法控制脚本的编写,,python,python-3.8,docstring,python-ast,Python,Python 3.8,Docstring,Python Ast,运行脚本。@SaladHead通过尝试解析文件的内容来完成,这可能在大多数情况下(如果不是所有情况下)都有效-就个人而言,我对用正则表达式解析脚本有点怀疑。就执行代码而言,大多数模块在导入时不会打印内容(原因很明显)。问题是软件开发人员无法控制脚本的编写,因此维护一致性是我们无法控制的。使解析文件变得困难。原始问题已在使用ast.parse/ast.get\u docstring。。。而且O.P.从未解释过这种方法的错误。@win:很好的观点…没有关于原因的线索。我必须研究一下是否有一种方法可以
运行脚本。@SaladHead通过尝试解析文件的内容来完成,这可能在大多数情况下(如果不是所有情况下)都有效-就个人而言,我对用正则表达式解析脚本有点怀疑。就执行代码而言,大多数模块在导入时不会打印内容(原因很明显)。问题是软件开发人员无法控制脚本的编写,因此维护一致性是我们无法控制的。使解析文件变得困难。原始问题已在使用
ast.parse
/ast.get\u docstring
。。。而且O.P.从未解释过这种方法的错误。@win:很好的观点…没有关于原因的线索。我必须研究一下是否有一种方法可以在不执行代码的情况下做到这一点。或者重新想象GUI,在用户选择运行脚本后打开另一个仅显示docstring的窗口。@SaladHead通过尝试解析文件内容来完成此操作,这可能在大多数情况下(如果不是所有情况下)都有效-就我个人而言,我对用正则表达式解析脚本有点怀疑。就执行代码而言,大多数模块在导入时不会打印内容(原因很明显)。问题是软件开发人员无法控制脚本的编写,因此维护一致性是我们无法控制的。使解析文件变得困难。原始问题已在使用ast.parse
/ast.get\u docstring
。。。而O.P.从未解释过这种方法的错误之处。@win:很好的观点……不知道为什么。
"""this is a docstring"""
print('hello world')
# index is test.py
def on_selected(self, index):
script_path = self.tree_view_model.filePath(index)
fparse = ast.parse(''.join(open(script_path)))
self.textBrowser_description.setPlainText(ast.get_docstring(fparse))
""" this is a multiline
docstring.
"""
print('hello world')
import importlib.util
def get_docstring(script_name, script_path):
spec = importlib.util.spec_from_file_location(script_name, script_path)
foo = importlib.util.module_from_spec(spec)
spec.loader.exec_module(foo)
return foo.__doc__
if __name__ == '__main__':
print(get_docstring('docstring_test', "./docstring_test.py"))
hello world
this is a multiline
docstring.
import ast
def get_docstring(script_path):
with open(script_path, 'r') as file:
tree = ast.parse(file.read())
return ast.get_docstring(tree, clean=False)
if __name__ == '__main__':
print(repr(get_docstring('./docstring_test.py')))
' this is a multiline\n docstring.\n'