2014-05-22 6 views
5

Comment puis-je simuler une session interactive python en utilisant l'entrée d'un fichier et enregistrer ce qui serait une transcription? En d'autres termes, si j'ai un fichier sample.py:Simulation d'une session python interactive

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

a=1 
b=2 

c=foo(a,b) 

c 

Je veux obtenir sample.py.out qui ressemble à ceci (bannière python omis):

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

J'ai essayé l'alimentation stdin à python, de Twitter les suggestions étaient 'script bash' sans détails (joué avec la commande de script dans bash, pas de joie). Je pense que ça devrait être facile, et il me manque quelque chose de simple. Ai-je besoin d'écrire un analyseur en utilisant exec ou quelque chose?

Les solutions Python ou ipython seraient parfaites. Et je pourrais vouloir ensuite convertir en html et mettre en évidence la syntaxe ce dans un navigateur web, mais c'est un autre problème ....

+0

Êtes-vous essayez d'enregistrer votre session de coquilles de python interactifs dans un fichier ou émuler le shell python/console? –

+0

@JamesMills Je pense que OP veut exactement le contraire, un script à convertir pour ressembler à un shell interactif. – luk32

+0

http://pythonhosted.org/sphinxcontrib-programoutput/ <- Cela fera quelque chose comme ça. –

Répondre

7

Je pense que code.interact fonctionnerait:

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()) 

(je mis à jour le code à utiliser fileinput afin qu'il lit à partir soit stdin ou sys.argv et fit courir sous python 2 et 3.)

+2

Fait ce qu'il dit sur l'étain. J'ai du mal à le casser :) – Spacedman

+0

Comment est-ce que je l'utilise? est-ce à partir de l'interpréteur python ou bash? dois-je entrer >>> show (sample.py) – Tim

+0

aussi, cela fonctionnera-t-il dans Python3? – Tim

Questions connexes