Можно ли заставить Python интерпретировать сценарий построчно и генерировать вывод, как будто из интерактивной оболочки?

Учитывая следующий интерактивный сеанс оболочки.

Python 2.7.5+ (default, Feb 27 2014, 19:37:08) 
[GCC 4.8.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 1+1
2
>>> 2+5
7
>>> "foo"
'foo'
>>> 

Обратите внимание, как после каждой строки интерпретатор выводит результат на консоль.

Если я включу те же три команды в сценарий Foo.py без операторов печати, вывод не будет сгенерирован.

Есть ли способ заставить интерпретатор Python генерировать тот же вывод, что и в интерактивном режиме, без изменения кода для ручной вставки операторов печати?


person merlin2011    schedule 01.08.2014    source источник
comment
Чтобы было ясно: вы хотите распечатать возвращаемое значение каждого оператора/блока в вашем скрипте.   -  person TheSoundDefense    schedule 02.08.2014
comment
@TheSoundDefense, я хочу не только напечатать его, я хочу, чтобы он был напечатан точно так же, как в интерактивном интерпретаторе.   -  person merlin2011    schedule 02.08.2014
comment
Как насчет сценария оболочки, который просто выполняет python -c "print repr(line)" для каждой строки?   -  person bbayles    schedule 02.08.2014


Ответы (1)


import code
console = code.InteractiveConsole()
prompt = '>>>'
source = '''
1 + 1
2+5
"foo"
x = 1
x
y = (2+
     3)
y + x     
'''.splitlines()
for line in source:
    print('{p} {l}'.format(p=prompt, l=line.rstrip()))
    prompt = '...' if console.push(line) else '>>>'

урожаи

>>> 
>>> 1 + 1
2
>>> 2+5
7
>>> "foo"
'foo'
>>> x = 1
>>> x
1
>>> y = (2+
...      3)
>>> y + x
6
person unutbu    schedule 01.08.2014
comment
Это сделает это! Спасибо. - person merlin2011; 02.08.2014