tags:

views:

55

answers:

2

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?

+5  A: 

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

carl
Well this is precisely what I am trying to do. I guess if there is no other way, configparser it is...
lango
@Iango, there is another way, but it's going to be more trouble than it's worth.
carl
+1  A: 

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.

S.Lott
I created the relevant python files with your above code to test it and I get this error: python test.py Traceback (most recent call last): File "test.py", line 7, in <module> for variable in globals:TypeError: 'builtin_function_or_method' object is not iterableAm I doing something wrong?
lango
Yes. You are doing something wrong. You are typing without thinking. Sometimes posted code has errors. You need to think for just a second before typing to see if you understand the code.
S.Lott
Maybe I just don't understand python well enough since I am relatively new to it? I typed your code out, was thinking through it, caught the missing parens at the end. But I thought globals (before your edit) referred to the file or maybe some built-in python variable. Anyways, thank you for your solution. I was trying out both yours and @carl's.
lango