Как выполнить некоторый произвольный код Python в InteractiveConsole перед тем, как перейти к - PullRequest
0 голосов
/ 20 января 2020

В приложении Python я хочу открыть Python REPL через класс InteractiveConsole. Но за до я прыгаю в интерактивную подсказку 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="")

Это всегда приводит к ошибке с SyntaxError: invalid syntax в 3-й строке pre_commands. Похоже, что pu sh понимает только одну команду завершения (как

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

, а не другую команду, несмотря на то, что InteractiveConsole.push имеет механизм ожидания, пока команда не будет выполнена. завершено.

Как я могу заставить эту работу работать с произвольными строками сложных и простых команд в строке pre_commands?

1 Ответ

2 голосов
/ 20 января 2020

Похоже, что интерактивное средство означает нажатие клавиши Enter / Return после каждого блока, чтобы выполнить его.

И клавиша Enter / Return также означает новую строку. Ваш код работает, если я добавляю новую строку после каждой печати, как показано ниже:

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

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

"""

ИЛИ, Отправляйте каждую строку с помощью \ n, например, с помощью строки console.pu sh (l + '\ n') .

...