2014-05-22 12 views
5

Jak mogę zasymulować sesję interaktywną Pythona przy użyciu danych wejściowych z pliku i zapisać, co byłoby transkrypcją? Innymi słowy, jeśli mam pliku sample.py:Symulacja sesji interaktywnego pytona

# 
# this is a python script 
# 
def foo(x,y): 
    return x+y 

a=1 
b=2 

c=foo(a,b) 

c 

Chcę dostać sample.py.out że wygląda następująco (python szyldem pominięta):

>>> # 
... # this is a python script 
... # 
... def foo(x,y): 
... return x+y 
... 
>>> a=1 
>>> b=2 
>>> 
>>> c=foo(a,b) 
>>> 
>>> c 
3 
>>> 

próbowałem karmienia stdin do pytona, Twittera sugestie były "skryptem basha" bez szczegółów (grane z poleceniem skryptu w bash, bez radości). Czuję, że to powinno być łatwe i brakuje mi czegoś prostego. Czy muszę napisać parser za pomocą exec czy coś takiego?

Rozwiązanie Python lub ipython byłoby w porządku. I może wtedy chcesz przekonwertować do formatu html i podświetlanie składni to w przeglądarce internetowej, ale to już inny problem ....

+0

Czy próbujesz zapisać sesję powłoki Pythona interaktywnego w pliku lub emulować powłokę/konsolę Pythona? –

+0

@JamesMills Myślę, że OP chce dokładnie naprzeciwko, skrypt, który ma być konwertowany, aby wyglądał jak z interaktywnej powłoki. – luk32

+0

http://pythonhosted.org/sphinxcontrib-programoutput/ <- To zrobi coś takiego. –

Odpowiedz

7

myślę code.interact będzie działać:

from __future__ import print_function 
import code 
import fileinput 


def show(input): 
    lines = iter(input) 

    def readline(prompt): 
     try: 
      command = next(lines).rstrip('\n') 
     except StopIteration: 
      raise EOFError() 
     print(prompt, command, sep='') 
     return command 

    code.interact(readfunc=readline) 


if __name__=="__main__": 
    show(fileinput.input()) 

(I uaktualniony kod do korzystania fileinput, tak aby czytał od stdin lub i wykonał go pod python 2 i 3.)

+2

Czy to, co mówi na puszce. Mam problem z rozbiciem :) – Spacedman

+0

jak tego użyć? czy jest to z poziomu interpretera pythona czy basha? czy mogę wprowadzić >>> show (sample.py) – Tim

+0

również, czy to działa w Pythonie3? – Tim