2010-08-23 6 views
4

J'ai actuellement un fichier python avec un tas de variables globales avec des valeurs. Je veux changer ces valeurs de façon permanente à partir d'un script python séparé. J'ai essayé setattr et tel mais il ne semble pas fonctionner. Y a-t-il un moyen de faire cela?comment modifier une valeur de variable dans un fichier python à partir d'un script python

+0

Voulez-vous dire que vous voulez réellement modifier le script d'un script différent? – alternative

+0

Je me demande si la bibliothèque standard a la capacité d'analyser un fichier source Python en mémoire, le modifier, puis écrire un fichier? –

+0

Votre autre question est hors-sujet. S'il vous plaît ** ne le mentionnez pas ici **. Veuillez supprimer la référence à une "autre question". S'il vous plaît se concentrer. –

Répondre

7

La réponse courte est: ne pas. Cela ne vaudra pas la peine.

Il semble que vous essayez de créer un fichier de configuration, puis que votre application le mette à jour. Vous devriez essayer d'utiliser ConfigParser, un module intégré qui peut lire et écrire pour vous des fichiers de configuration sans trop limitée: http://docs.python.org/library/configparser.html

+0

Eh bien c'est exactement ce que je suis essayer de faire. Je suppose que s'il n'y a pas d'autre moyen, configparser c'est ... – lango

+1

@Iango, il y a une autre façon, mais ça va être plus de problèmes que ça en vaut la peine. – carl

3

currently have a python file with a bunch of global variables with values

Feignons ça ressemble à ça. globals.py

this = 1 
that = 2 

Et il n'y a rien d'autre dans ce fichier. Rien.

Supposons en outre que ce fichier est utilisé comme suit.

from globals import * 

Let de plus prétendre que nous avons une simulation qui doit "mettre à jour" globals.py

import os 
os.rename("globals.py", "globals.bak") 
with open("globals.py", "w") as target: 
    for variable in ('some', 'list', 'of', 'sensible', 'globals'): 
     target.write("{0!s} = {1!r}".format(variable, globals()[variable]) 

Fondamentalement, vous recréez le code Python de votre dictionnaire global.

Ceci est une solution épouvantable. S'il vous plaît ne l'utilisez pas réellement.

+0

J'ai créé les fichiers python pertinents avec votre code ci-dessus pour le tester et j'obtiens cette erreur: python test.py Traceback (appel le plus récent en dernier): Fichier "test.py", ligne 7, en pour variable globals: TypeError: l'objet 'builtin_function_or_method' n'est pas itérable Est-ce que je fais quelque chose de mal? – lango

+1

Oui. Vous faites quelque chose de mal. Vous tapez sans réfléchir. Parfois le code posté a des erreurs. Vous devez réfléchir pendant une seconde avant de taper pour voir si vous comprenez le code. –

+1

Peut-être que je ne comprends pas assez bien Python puisque je suis relativement nouveau à ce sujet? J'ai tapé votre code, réfléchi, attrapé les parens manquants à la fin. Mais je pensais que les globals (avant votre modification) se référaient au fichier ou peut-être à une variable python intégrée. En tout cas, merci pour votre solution. J'essayais à la fois le vôtre et celui de @ carl. – lango

Questions connexes