2016-01-22 41 views
1

一段時間以來,我一直試圖圍繞着Cellebrite的物理分析器,Python shell的腳本。 PA外殼的文檔不完整,我相信API的全面文檔將使編碼變得更容易。幾個星期前,我意識到內置help()函數會給我大部分我需要的信息,但它受限於其對殼體的限制,等等。我如何解析python`help`輸出到類存根

我最近完成了一個腳本,它將每個幫助條目(以及一些附加信息)保存到我桌面上目錄中的txt文件。我想將這些文件轉換爲類存根,我可以使用它們來創建更清晰的文檔並在IDE中簡化類型提示。

下面是問題: 我不知道如何解析幫助文件。我可以編寫一系列複雜的正則表達式,但是我的程序已經夠混亂了。

有誰知道將幫助文檔轉換爲存根的簡單方法嗎?

P.S.

由存根我的意思是這樣:

幫助:

|  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的不是我的語言,所以請原諒以上任何語法錯誤。

編輯: 我真的想開車回家的事實,蟒蛇我的語言,如果你看到了這個問題,並認爲「很好,他一定已嘗試」,我可能還沒有

EDIT2: 這是劇本我到目前爲止有:

https://drive.google.com/file/d/0B-5Y1OoryQYuczE4REpDR1FiRWc/view?usp=sharing 原諒可怕的語法。整個事物嵌套在if True:中,因爲除非縮進,否則外殼將在第二行中斷開,並且我需要以某種方式開始該塊。而我以二進制模式寫入文件的原因是,如果我嘗試進行文本操作,它會一直出錯。其餘的可能就在我身上。

EDIT3: 幫助示例:https://drive.google.com/file/d/0B-5Y1OoryQYuSjJrOGFLeVU3RWc/view?usp=sharing

如果這是太廣,我不明白什麼也沒有得到充分的解釋。我很感激任何關於它太模糊的地方。

+2

你有沒有理由不想自己解析現有的類? –

+0

如果你會原諒我的無知,我不知道這意味着什麼。 – chrisgotter

+0

你的IDE如何知道它應該從你的'chrisgotter.somelib.Class'中繪製關於'somelib.Class'對象的type-hint信息?另外,如果模塊本身中的類型信息不夠用,那麼您的信息副本如何提供幫助?或者你打算在你學習更多關於它們的時候手動註釋你的存根類嗎?如果是這樣的話,最好忽略'help'系統,只需複製和編輯* .py文件(如果只有少數幾個,或者使用['ast'模塊](https:// docs .python.org/3/library/ ast.html))......這可能是伊格納西奧說的話。 –

回答

0

你不需要解析幫助數據來做你想做的事情。

相反,你可以用標準的python庫直接反思這個類。

例如,試試這個:

import inspect 
print inspect.getmembers(C) 

你應該能夠很容易地重新創建存根,而不必解析幫助文本。

+0

我一定會嘗試下一次我有機會 – chrisgotter