shell – La commande read

La commande read lit l’entrée standard et affecte à la variable passé en paramètre la valeur:

~ read variable_1
foobar
~ echo $variable_1
~ foobar

Si vous voulez que le premier mot soit stocké dans la variable_1 et que le reste soit accessible à travers la variable nommée variable_2

~ read variable_1 variable_2

Le premier mot sera stocké dans la variable variable_1 et tout le reste de la chaine de caractère sera dans variable_2. Vous pouvez continuer ainsi de suite …

Autre découverte: rajouté l’option -s et vous pourrez cacher la saisie. Intéréssant pour saisir un mot de passe.

read -s mot_de_passe

Stay tuned

Modèle de données

Je vous cite aujourd’hui une belle définition d’un modèle de données tiré de l’ouvrage Introduction aux bases de données de Chris J. Date

Un modèle de données et une définition logique, indépendante, abstraite des objets et opérateurs qui, ensemble, constituent une machine abstraite avec laquelle les utilisateurs interagissent. Les objets nous permettent de modéliser les structures des données. Les opérateurs nous permettent de modéliser le comportement.

Qui s’en suit avec:

Une implémentation d’un modèle de données est une réalisation physique, sur une machine réelle, des différents composants de la machine abstraite qui, une fois réunis constituent le modèle.

Pour finir sur:

Le modèle correspond à ce que les utilisateurs doivent savoir; l’implémentation est ce que les utilisateurs ne doivent pas savoir

Stay tuned

MAC OS X et Sed : remplacer tabulation par ;

Après m’être bataillé pour remplacer des tabulations (TAB) par des ‘;’ avec l’outil en ligne de commande ‘sed’ sur MAC OS X, je vous livre simplement la solution :

sed "s/[CTRL+V][CTRL+i]/;/g" fichier.txt > fichier_modifie.txt

Sur le web, vous trouverez souvent :
sed "s/\t/;/g" fichier.txt > fichier_modifie.txt

NON NON NON, sur MAC OS X le terminal n’est pas capable de comprendre ce littéral.

Enjoy

Django – standalone script

Par moment, avec une application django tu voudrai créer des scripts en dehors de l’environnement d’exécution django pour automatiser certaines tâches … La mienne étant de générer des données faussement bidons…

S’en suit une recherche sur internet et quelques éléments de réponse :

1.  Un script :

import os
import sys

sys.path.append(“/Users/said/path/monprojet_web/”)
os.environ[‘DJANGO_SETTINGS_MODULE’] = ‘monprojet_web.settings’

Qui fonctionnera si ta structure du projet n’a pas changé d’un ioata, ou qui plantera à coup sûr si tu as suivi ce tuto. (apps/monapp)

Pour remerdier à ce foutu problème, ajoute cette ligne pour que le script finale ressemble à ça :

import os
import sys

sys.path.append(“/Users/said/path/monprojet_web/”)
sys.path.append(“/Users/said/path/monprojet_web/apps/”)

os.environ[‘DJANGO_SETTINGS_MODULE’] = ‘monprojet_web.settings’

Ensuite pour éviter de réécrire toutes ces lignes, tu peux les incorporer dans un module et faire un import de celui-ci.

A la fin, tu pourra importer tes modèles comme ceci :

import Standalone_django_script

from monapp.models import MaClasse

# Anything you want:
print MaClasse.objects.all()

Sinon une des solutions les plus sympa, c’est d’utiliser django-extensions, avec sa commande runscript. Allez c’est par ici

Pour résumer :

1 – Installer l’extension et ajouter l’application au fichier settings.py
2 – Créer un repertoire “scripts” et un fichier “__init__.py” dans ce répertoire
3 – Crée ton script dans le répertoire “scripts”. Sache que chaque fichier doit posséder une méthode “run” qui est le point d’entrée.
4 – “python manage.py runscript monscript” sans l’extension “py”

Et j’oubliais, pour générer mes données, j’utilise model-mommy

Enjoy !