I currently have a python file with a bunch of global variables with values. I want to change these values permanently from a separate python script. I've tried setattr and such but it doesnt seem to work. Is there a way to do this?
-
Do you mean that you want to actually modify the one script from a different one?alternative– alternative2010-08-23 20:50:06 +00:00Commented Aug 23, 2010 at 20:50
-
I wonder if the standard library has the capability to parse a Python source file in memory, change it, and then write that the a file?Humphrey Bogart– Humphrey Bogart2010-08-23 20:51:28 +00:00Commented Aug 23, 2010 at 20:51
-
Your other question is off-topic. Please do not mention it here. Please delete the reference to an "other question". Please focus.S.Lott– S.Lott2010-08-23 20:52:48 +00:00Commented Aug 23, 2010 at 20:52
-
stackoverflow.com/questions/768634/…Daniel Kluev– Daniel Kluev2010-08-23 21:11:17 +00:00Commented Aug 23, 2010 at 21:11
2 Answers
The short answer is: don't. It won't be worth the trouble.
It sounds like you are trying to create a configuration file and then have your application update it. You should try using ConfigParser, a built-in module that can read and write configuration files for you with limited hassle: http://docs.python.org/library/configparser.html
currently have a python file with a bunch of global variables with values
Let's pretend it looks like this. globals.py
this = 1
that = 2
And there's nothing else in this file. Nothing.
Let's further pretend that this file is used as follows.
from globals import *
Let's further pretend that we have some simulation which needs to "update" 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] )
Basically, you recreate Python code from your global dictionary.
This is a dreadful solution. Please don't actually use it.