如何在代码中自动缩进 Python 代码?

0 投票
1 回答
505 浏览
提问于 2025-04-17 18:14

我正在对一个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代码的缩进格式。

有没有办法在插入时自动调整缩进,或者我需要知道下一行字符的索引,然后在字符串中插入空格再进行插入呢?

1 个回答

1

在你的例子中,其实挺简单的:

  • “entry”消息的缩进要和后面的语句完全一致。

  • “exit”消息的缩进要和对应的“entry”消息完全一致。

不过,你可以通过使用装饰器来大大简化这个工作,而不是用两个明确的print语句。像@trace这样的东西,从这个页面上可以找到,插入代码要比成对的prints简单得多。

更进一步,你甚至可以在不修改源文件的情况下,动态地进行监控。

撰写回答