Initial commit
This commit is contained in:
commit
9198139d0f
1793 files changed
+405866
No files matched your search
@@ -0,0 +1,71 @@
|
||||
import code
|
||||
import inspect
|
||||
from pprint import pprint
|
||||
|
||||
class REBLConsole(code.InteractiveConsole):
|
||||
def __init__(self, locals=None):
|
||||
super().__init__(locals)
|
||||
self._breakpoints = set()
|
||||
|
||||
def showsource(self, obj):
|
||||
"""显示对象源代码"""
|
||||
try:
|
||||
lines, start = inspect.getsourcelines(obj)
|
||||
print(f"Source code of {obj.__name__}:")
|
||||
for i, line in enumerate(lines, start):
|
||||
print(f"{i:4d}: {line.rstrip()}")
|
||||
except (TypeError, OSError):
|
||||
print("No source code available")
|
||||
|
||||
def inspect(self, obj):
|
||||
"""检查对象详细信息"""
|
||||
print(f"Inspecting {type(obj).__name__}:")
|
||||
pprint(dir(obj))
|
||||
if callable(obj):
|
||||
print("\nSignature:")
|
||||
print(inspect.signature(obj))
|
||||
|
||||
def add_breakpoint(self, line_no):
|
||||
"""添加断点"""
|
||||
self._breakpoints.add(line_no)
|
||||
print(f"Breakpoint set at line {line_no}")
|
||||
|
||||
def runcode(self, code_obj):
|
||||
"""执行代码并处理断点"""
|
||||
try:
|
||||
exec(code_obj, self.locals)
|
||||
except SystemExit:
|
||||
raise
|
||||
except:
|
||||
self.showtraceback()
|
||||
|
||||
def start_rebl():
|
||||
"""启动REBL环境"""
|
||||
print("Python REBL - Read Eval Break Loop")
|
||||
print("Type 'help' for available commands")
|
||||
|
||||
console = REBLConsole(locals())
|
||||
|
||||
while True:
|
||||
try:
|
||||
code_input = input("rebl> ")
|
||||
|
||||
if code_input.strip() == "help":
|
||||
print("REBL commands:")
|
||||
print(" help - 显示帮助")
|
||||
print(" inspect(obj) - 检查对象")
|
||||
print(" source(obj) - 显示源代码")
|
||||
print(" break(line) - 设置断点")
|
||||
print(" exit - 退出REBL")
|
||||
continue
|
||||
elif code_input.strip() == "exit":
|
||||
break
|
||||
|
||||
console.push(code_input)
|
||||
except KeyboardInterrupt:
|
||||
print("\nKeyboardInterrupt")
|
||||
except EOFError:
|
||||
break
|
||||
|
||||
if __name__ == "__main__":
|
||||
start_rebl()
|
||||
Reference in new issue
Block a user