如何在进入交互之前在 InteractiveConsole 中执行一些任意 Python 代码

How to execute some arbitary Python code in InteractiveConsole before jumping into interact

在 Python 应用程序中,我想通过 InteractiveConsole class 打开一个 Python REPL。但是 before 我跳进交互式 Python 提示符(通过 interact 方法)我想执行一些以字符串形式给出的命令。这是一个最小的例子:

pre_commands = """for i in range(3):
    print(i*i)
for i in range(3):
    print(i*17)
"""

console = code.InteractiveConsole()


for l in pre_commands.splitlines():
    console.push(l)

console.interact(banner="", exitmsg="")

这总是在 pre_commands 的第 3 行出现 SyntaxError: invalid syntax 错误。看起来 push 只理解 one 完整的命令(比如

for i in range(3):
    print(i*i)

而不是另一个命令,尽管 InteractiveConsole.push 有一个等待命令完成的机制。

如何使用字符串 pre_commands 中的任意行复杂和简单的命令来完成这项工作?

看起来像交互式意味着在每个块后按 Enter/Return 键来执行它。

和Enter/Return键也表示换行。 如果我在每次打印后添加新行,您的代码就可以工作,如下所示:

pre_commands = """for i in range(3):
    print(i*i)

for i in range(3):
    print(i*17)

"""

或者, 发送带有 \n 的每一行,例如用行 console.push(l+'\n').