Je travaille dans le shell interactif Python (ActiveState ActivePython 2.6.4 sous Windows XP). J'ai créé une fonction qui fait ce que je veux. Cependant, j'ai effacé l'écran, donc je ne peux pas revenir en arrière et regarder la définition de la fonction. Il s'agit également d'une fonction multiligne, donc la flèche vers le haut pour réafficher les lignes est de valeur minimale. Y at-il de toute façon retourner le code de la fonction? Il y a des attributs "code" et "func_code" affichés par dir(), mais je ne sais pas s'ils contiennent ce dont j'ai besoin.Définition de la fonction d'affichage dans le shell interactif
Répondre
Non, __code__
et func_code
sont des références au bytecode compilé - vous pouvez les désassembler (voir dis.dis
) mais ne pas revenir au code source Python.
Hélas, le code source est tout simplement disparu, ne se souvenait nulle part ...:
>>> import inspect
>>> def f():
... print 'ciao'
...
>>> inspect.getsource(f)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/inspect.py", line 694, in getsource
lines, lnum = getsourcelines(object)
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/inspect.py", line 683, in getsourcelines
lines, lnum = findsource(object)
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/inspect.py", line 531, in findsource
raise IOError('could not get source code')
IOError: could not get source code
>>>
Si inspect
ne peut pas y accéder, c'est un signe assez indicatif.
Si vous étiez sur une plate-forme en utilisant GNU readline
(essentiellement, tout sauf Windows), vous pourriez exploiter le fait que readline
lui-même ne rappeler quelques « histoire » et peut l'écrire dans un fichier ... :
>>> readline.write_history_file('/tmp/hist.txt')
puis de lire ce fichier d'historique - cependant, je ne connais aucun moyen de le faire sous Windows.
Vous pouvez utiliser un certain IDE avec de meilleures capacités de mémoire, plutôt que l'interpréteur de commandes "brut", en particulier sur une plate-forme telle que Windows.
Je suis d'accord sur l'IDE.Mais le shell ressemble à une fenêtre de commande DOS et le PHB ne me demande pas ce que je fais. –
peut-être cela une bonne demande de fonctionnalité pour l'inactivité ... –
ipython peut aider pour un IDE riche à une fenêtre de commande DOS, voir http://ipython.scipy.org/moin/ - il est si riche que j'ai perdu la trace de la plupart de ses fonctionnalités maintenant ;-). –
À moins qu'il y ait un moyen de le faire sur le shell activestate, non, il n'y a aucun moyen de récupérer le code exact que vous avez tapé sur le shell. Au moins sur Linux, en utilisant le shell Python fourni par CPython, il n'y a pas de moyen particulier d'y parvenir. Peut-être en utilisant iPython. L'attribut func_code est un objet représentant le bytecode de fonction, la seule chose que vous pouvez obtenir de cet objet est le bytecode lui-même, pas le code "original".
Sur Linux, 'readline.write_history_file' aiderait - mais pas sur Windows. –
Non, pas vraiment. Vous pouvez écrire yourfunc.func_code.co_code (le bytecode réellement compilé) dans un fichier, puis essayer de décompiler ou unpyc pour les décompiler, mais les deux projets sont vieux et non maintenus, et n'ont jamais supporté la décompilation.
Il est infiniment plus simple d'écrire simplement votre fonction dans un fichier pour commencer.
Cela fait longtemps que quelqu'un en a besoin. getsource
donne le code source:
>>> def sum(a, b, c):
... # sum of three number
... return a+b+c
...
>>> from dill.source import getsource
>>>
>>> getsource(sum)
'def sum(a, b, c):\n # sum of three number\n return a+b+c\n'
pour installer dill
run pip install dill
. Pour obtenir formaté:
>>> fun = getsource(sum).replace("\t", " ").split("\n")
>>> for line in fun:
... print line
...
def sum(a, b, c):
# sum of three number
return a+b+c
- 1. Détection du shell interactif dans le script ENV de ksh
- 2. Tutoriel F # interactif shell (fsi)?
- 3. Comment fonctionne Sympy? Comment interagit-il avec le shell interactif Python, et comment fonctionne le shell interactif Python?
- 4. Code multi-lignes en shell interactif PHP
- 5. Exportation d'une fonction dans le shell
- 6. Est-il possible de construire un shell C interactif?
- 7. fonction d'ami dans la définition de modèle
- 8. Gestion des exceptions sans bloc try dans le shell interactif de Python
- 9. Comment modifier les couleurs du shell interactif F #
- 10. Définition de la fonction Actionscript
- 11. Existe-t-il un site proposant un shell F # interactif?
- 12. Comment entrer un caractère sterling (£) dans le shell interactif Python sur Mac OS X?
- 13. Interactif interactif en perl
- 14. la fonction Définition Clojure dans IntelliJ
- 15. Fonction Déclaration/Fonction Définition
- 16. Mode interactif dans matplotlib
- 17. Définition du format de codage java dans script shell
- 18. Terminal interactif dans VIM
- 19. définition de la fonction VIM personnalisée/emplacement
- 20. Désassemblage interactif dans GDB
- 21. Interactif cmd.exe dans Windows
- 22. Définition de fonction dans le fichier d'en-tête car la fonction est utilisée par différents projets
- 23. Définition de pointeurs de fonction
- 24. Définition de la fonction PHP, arguments NULL
- 25. Problèmes avec le plan interactif
- 26. Est-ce que Python peut imprimer une définition de fonction?
- 27. Comment diagnostiquer la source de l'échec dans F # interactif
- 28. Coquille interactif personnalisée
- 29. Afficher la procédure stockée/définition de fonction dans MySQL
- 30. Comment puis-je recharger le shell interactif et exécuter des commandes au démarrage d'emacs?
je l'avais suggéré d'utiliser la fonction « aide », mais réalisé que vous voulez que le code réel dans la fonction, non seulement il est la signature. –
Je voudrais obtenir tout le code que j'ai écrit dans la console en tant que fichier, mais pour les réponses que vous avez reçues ce n'est pas possible ... triste –