2010-02-11 5 views
2

dire que je fais quelque chose comme ça dans une coquille de python pour mon application Django:Python Shell, la consignation des commandes pour Easy réexécution

>>>from myapp.models import User 
>>>user = User.objects.get(pk=5) 
>>>groups = user.groups.all() 

Ce que je voudrais faire est de planquer ces 3 commandes en quelque sorte sans quitter La coquille. Le but étant que je puisse rapidement restaurer un environnement similaire si je redémarre la session shell plus tard.

Répondre

2

Le shell Django utilisera IPython si disponible, qui prend en charge un historique persistant.

Également, écrire des scripts jetables is not difficult.

+0

Yay pour IPython ... ça bouge. Les fonctionnalités d'informations sur les objets dynamiques sont vraiment géniales. J'avais écrit quelques-unes de mes propres aides mais c'est tellement plus agréable. – Koobz

1

Ainsi, grâce à Ignacio, avec IPython installé:

>>>from myapp.models import User 
>>>user = User.objects.get(pk=5) 
>>>groups = user.groups.all() 
>>>#Ipython Tricks Follow 
>>>hist #shows you lines in your history 
>>>edit 1:3 # Edit n:m lines above in text editor. I save it as ~/testscript 
>>>run ~/testscript 

Groovy!

+1

% logstart est également utile: il enregistre tout ce que vous avez entré depuis le début de la session dans un fichier ipython_log.py. – EOL

1

Koobz, puisque vous venez de devenir un récent converti à ipython, il y a un hack frais que je l'utilise pour importer automatiquement tous mes modèles d'application en mode interactif:

#!/bin/env python 
# based on http://proteus-tech.com/blog/code-garden/bpython-django/ 
try: 
    from django.core.management import setup_environ 
    import settings 
    setup_environ(settings) 
    print "imported django settings" 
    try: 
     exec_strs = ["from %s.models import *"%apps for apps in settings.INSTALLED_APPS if apps not in ['django_extensions']] 
     for x in exec_strs: 
      try: 
       exec(x) 
      except: 
       print 'not imported for %s' %x 
     print 'imported django models' 
    except: 
     pass 
except: 
    pass 

Alors je viens alias: ipython -i $HOME/.pythonrc

+0

C'est sympa mais ça ne marche pas pour moi à cause de ma structure de projet géniale. Pourtant, cela m'a encouragé à créer un fichier .pythonrc personnalisé, avec un alias ipython. Je vais juste le personnaliser à partir de maintenant. Retourne au commentaire des scripts jetables d'Ignacio. Alors merci pour ça! – Koobz

Questions connexes