2013-03-07 65 views
0

我是逆向工程的python應用程序。通過它,我將通過動態地在應用程序中測試代碼來觀察行爲。問題是我需要將代碼插入正確的縮進級別。如何自動縮進python代碼爲什麼使用代碼..?

例如讓我們考慮的代碼片段,我將插裝:

class A: 
    def move(self,name): 
     name=self.name 
     print name 
    def move1(self): 
     print 'dude' 

現在對於上面的示例代碼,我將插裝出入境記錄和改動的代碼看起來應該像下面這樣

enter code class A: 
    def move(self,name): 
     print 'Entry move class='A'' 
     name=self.name 
     print name 
     Print'Exit move class='A'' 
    def move1(self): 
     print 'Entry move1 class='A'' 
     print 'dude' 
     print 'Exit move class='A'' 

這是我需要在儀器上的代碼,而不是我得到如下:

enter code class A: 
    def move(self,name): 
print 'Entry move class='A'' 
      name=self.name 
      print name 
print'Exit move class='A'' 
     def move1(self): 
print 'Entry move1 class='A'' 
      print 'dude' 
print'Exit move1 class='A'' 

因爲我正在寫一個腳本,它插入到下一行,並不知道Python代碼的縮進格式。

有無論如何,我可以自動調整縮進插入時,或者我應該需要知道下一行中的字符的索引,並插入字符串的空格,然後插入。

+0

看看':'冒號;它表示縮進級別預計會增加.. – 2013-03-07 10:09:12

+0

除此之外,您可能希望從['ast' parse tree](http://docs.python.org/2/library/ast.html)開始到對代碼的含義有更好的感受*。或者在你的類和函數上使用[decorators](http://stackoverflow.com/questions/739654/understanding-python-decorators),而不是在任何地方插入print語句。 – 2013-03-07 10:13:46

回答

1

在您的例子,它實際上是相當容易:

  • 「入門」的消息應該具有完全相同的縮進它後面的語句。

  • 「退出」消息應該與對應的「條目」消息具有完全相同的縮進。

也就是說,你可以通過使用一個裝飾,而不是兩個顯式聲明print大大簡化了工作。與prints配對相比,類似@tracethis page之間的內容更容易插入代碼。

要更進一步,而不是修改源文件,您可以即時執行檢測。