我如何将 python `help` 输出解析为 class 存根
how can I parse python `help` output into class stubs
一段时间以来,我一直在努力为 Cellebrite 的物理分析器编写脚本,Python shell。 PA shell 的文档不完整,我相信 API 的综合文档会使编码变得容易得多。几周前,我意识到内置的 help()
函数可以提供我需要的大部分信息,但它受限于 shell 等其他方面。
我最近完成了一个脚本,它将每个帮助条目(以及一些附加信息)保存到桌面目录中的一个 txt 文件中。我想将这些文件变成 class 存根,我可以使用它们创建更清晰的文档并促进 IDE.
中的类型提示
问题是:
我不知道如何解析帮助文件。我可以写一系列复杂的正则表达式,但我的程序已经够混乱了。
有谁知道将帮助文档翻译成存根的简单方法吗?
P.S.
by stub 我的意思是这样的:
帮助:
| C(Stream baseStream, long offset, long length)
|
|
| Data and other attributes defined here:
|
| Equals(...)
| bool Equals(self, C other)
存根:
class C(object):
"""
No Documentation
"""
def __init__(self, baseStream, offset, length):
"""
No Documentation
:type baseStream: Stream
:type offset: long
:type length: long
:rtype: C
"""
pass
def Equals(self, other):
"""
No Documentation
:type other: C
:rtype: bool
"""
pass
python不是我真正的语言,所以请原谅上面的任何语法错误。
编辑:
我真的很想把 python 不是 我的语言这一事实带回家,如果你看到这个问题并认为 "well, he must have tried that",我可能没有 [=18] =]
编辑2:
这是我目前的脚本:
https://drive.google.com/file/d/0B-5Y1OoryQYuczE4REpDR1FiRWc/view?usp=sharing
原谅可怕的语法。整个内容嵌套在 if True:
中,因为除非缩进,否则 shell 将在第二行中断,我需要以某种方式开始该块。我以二进制模式写入文件的原因是,如果我尝试做文本,事情就会不断出错。剩下的可能就在我身上。
编辑 3:
帮助示例:https://drive.google.com/file/d/0B-5Y1OoryQYuSjJrOGFLeVU3RWc/view?usp=sharing
如果这太笼统了,我不明白什么地方没有得到充分的解释。我将不胜感激关于它哪里太模糊的任何指示。
您无需解析帮助数据即可执行所需操作。
相反,您可以直接使用标准 python 库自省 class。
例如,试试这个:
import inspect
print inspect.getmembers(C)
您应该能够轻松地重新创建存根,而无需解析帮助文本。
一段时间以来,我一直在努力为 Cellebrite 的物理分析器编写脚本,Python shell。 PA shell 的文档不完整,我相信 API 的综合文档会使编码变得容易得多。几周前,我意识到内置的 help()
函数可以提供我需要的大部分信息,但它受限于 shell 等其他方面。
我最近完成了一个脚本,它将每个帮助条目(以及一些附加信息)保存到桌面目录中的一个 txt 文件中。我想将这些文件变成 class 存根,我可以使用它们创建更清晰的文档并促进 IDE.
中的类型提示问题是: 我不知道如何解析帮助文件。我可以写一系列复杂的正则表达式,但我的程序已经够混乱了。
有谁知道将帮助文档翻译成存根的简单方法吗?
P.S.
by stub 我的意思是这样的:
帮助:
| C(Stream baseStream, long offset, long length)
|
|
| Data and other attributes defined here:
|
| Equals(...)
| bool Equals(self, C other)
存根:
class C(object):
"""
No Documentation
"""
def __init__(self, baseStream, offset, length):
"""
No Documentation
:type baseStream: Stream
:type offset: long
:type length: long
:rtype: C
"""
pass
def Equals(self, other):
"""
No Documentation
:type other: C
:rtype: bool
"""
pass
python不是我真正的语言,所以请原谅上面的任何语法错误。
编辑: 我真的很想把 python 不是 我的语言这一事实带回家,如果你看到这个问题并认为 "well, he must have tried that",我可能没有 [=18] =]
编辑2: 这是我目前的脚本:
https://drive.google.com/file/d/0B-5Y1OoryQYuczE4REpDR1FiRWc/view?usp=sharing
原谅可怕的语法。整个内容嵌套在 if True:
中,因为除非缩进,否则 shell 将在第二行中断,我需要以某种方式开始该块。我以二进制模式写入文件的原因是,如果我尝试做文本,事情就会不断出错。剩下的可能就在我身上。
编辑 3: 帮助示例:https://drive.google.com/file/d/0B-5Y1OoryQYuSjJrOGFLeVU3RWc/view?usp=sharing
如果这太笼统了,我不明白什么地方没有得到充分的解释。我将不胜感激关于它哪里太模糊的任何指示。
您无需解析帮助数据即可执行所需操作。
相反,您可以直接使用标准 python 库自省 class。
例如,试试这个:
import inspect
print inspect.getmembers(C)
您应该能够轻松地重新创建存根,而无需解析帮助文本。