2010-08-23 111 views
4

我目前有一个带有一堆带有值的全局变量的python文件。我想从一个单独的python脚本中永久地更改这些值。我试过setattr等,但它似乎并没有工作。有没有办法做到这一点?如何从Python脚本更改python文件中的变量值

+0

你的意思是说你想修改另一个脚本吗? – alternative 2010-08-23 20:50:06

+0

我不知道标准库是否有能力解析内存中的Python源文件,更改它,然后写入一个文件? – 2010-08-23 20:51:28

+0

你的其他问题是无关紧要的。请**不要在这里提及**。请删除对“其他问题”的引用。请专注。 – 2010-08-23 20:52:48

回答

7

简短的回答是:不。这不值得麻烦。

这听起来像你正在尝试创建一个配置文件,然后让你的应用程序更新它。你应该尝试使用ConfigParser,内置模块,可以在有限麻烦你读写配置文件:http://docs.python.org/library/configparser.html

+0

嗯,这正是我所知道的试图去做。我想如果没有其他办法,configparser它是... – lango 2010-08-23 20:58:14

+1

@Iango,有另一种方式,但它会比它的价值更麻烦。 – carl 2010-08-23 21:02:17

3

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

让我们假设它看起来像这样。 globals.py

this = 1 
that = 2 

还有的闲来无事在这个文件。没有。

让我们进一步假装使用这个文件如下。

from globals import * 

让我们进一步假装我们有一些模拟一个需要“更新” 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]) 

基本上,您从全局字典重新Python代码。

这是一个可怕的解决方案。请不要实际使用它。

+0

我用上面的代码创建了相关的python文件来测试它,我得到这个错误:python test.py Traceback(最近调用最后一次): 文件“test.py”,第7行,在中 变量in全局变量: TypeError:'builtin_function_or_method'对象不可迭代 我做错了什么? – lango 2010-08-23 21:17:36

+1

是的。你做错了什么。你在打字时没有想到。有时候发布的代码有错误。在打字之前,你需要考虑一下,看看你是否理解了代码。 – 2010-08-23 21:18:38

+1

也许我只是不明白蟒蛇,因为我相对较新呢?我输入你的代码,正在考虑它,最后抓到了失踪的对象。但我认为全局变量(在编辑之前)引用了该文件或可能是一些内置的python变量。无论如何,谢谢你的解决方案。我正在尝试你的和@ carl的。 – lango 2010-08-23 21:38:09

相关问题