2008-08-28 18 views
7

C'est quelque chose que je pense serait très utile. Fondamentalement, je voudrais qu'il y ait un moyen d'éditer la source Python par programme sans nécessiter d'intervention humaine. Il y a deux ou trois choses que je voudrais faire avec ceci:Édition par programme de la source Python

  1. Modifier la configuration des applications Python qui utilisent des modules de source pour la configuration.

  2. Mettre en place un "modèle" afin que je puisse personnaliser un fichier source Python à la volée. De cette façon, je peux mettre en place un système "projet" sur une application open source sur laquelle je travaille et permettre la personnalisation de certains fichiers.

Je pourrais probablement écrire quelque chose qui peut le faire moi-même, mais je peux voir que cela ouvre beaucoup de problèmes de type "diable dans les détails". Y a-t-il des moyens de le faire actuellement, ou est-ce que je vais juste devoir mordre la balle et l'implémenter moi-même?

Répondre

3

La bibliothèque standard de Python fournit de très bonnes fonctionnalités pour travailler avec la source Python; notez les modules tokenize et parser.

+1

Je préférerais ne pas avoir à muck avec l'arbre AST si je peux l'éviter, donc je vais prendre votre réponse pour signifier "il n'y a pas de moyen facile de le faire." –

0

J'ai eu le même problème et j'ai simplement ouvert le fichier et fait remplacer: puis recharger le fichier dans l'interpréteur Python. Cela fonctionne bien et est facile à faire. Dans le cas contraire, AFAIK vous devez utiliser certains objets conf.

0

La plupart de ces types de choses peuvent être déterminées par programmation en Python, en utilisant des modules comme sys, os, et l'identifiant spécial _file_ qui vous indique où vous êtes dans le chemin du système de fichiers.

Il est important de garder à l'esprit que lorsqu'un module est importé pour la première fois, il exécute tout ce qui se trouve dans la portée du fichier, ce qui est important pour développer des comportements dépendant du système. Par exemple, le module os détermine essentiellement le système d'exploitation que vous utilisez à l'importation, puis ajuste son implémentation en conséquence (en important un autre module correspondant à Linux, OSX, Windows, etc.).

Il y a beaucoup de puissance dans cette fonctionnalité et quelque chose dans ce sens est probablement ce que vous cherchez. :)

[Edit] J'ai également utilisé socket.gethostname() dans quelques rares cas, hackish. ;)