2010-08-23 5 views
4

В настоящее время у меня есть файл python с кучей глобальных переменных со значениями. Я хочу постоянно изменять эти значения из отдельного сценария python. Я пробовал setattr и такой, но он, похоже, не работает. Есть ли способ сделать это?Как изменить значение переменной в файле python из сценария python

+0

Вы хотите сказать, что хотите на самом деле изменить один скрипт из другого? – alternative

+0

Интересно, может ли стандартная библиотека анализировать исходный файл Python в памяти, изменять его, а затем записывать этот файл? –

+0

Ваш другой вопрос не по теме. Пожалуйста, ** не упоминайте об этом здесь **. Пожалуйста, удалите ссылку на «другой вопрос». Пожалуйста, сосредоточьтесь. –

ответ

7

Короткий ответ: не надо. Это не стоит того.

Похоже, вы пытаетесь создать файл конфигурации, а затем обновите его приложение. Вы должны попробовать использовать ConfigParser, встроенный в модуль, который может читать и записывать файлы конфигурации для вас с ограниченной хлопот: http://docs.python.org/library/configparser.html

+0

Ну, это именно то, что я есть пытаясь сделать. Я думаю, если нет другого способа, configparser это ... – lango

+1

@ Iango, есть другой способ, но это будет больше проблем, чем того стоит. – carl

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, в для переменной в globals: ТипError: объект «builtin_function_or_method» не итерируется Я что-то не так? – lango

+1

Да. Вы делаете что-то неправильно. Вы печатаете, не задумываясь. Иногда у зарегистрированного кода есть ошибки. Вам нужно подумать всего за секунду, прежде чем вводить текст, чтобы понять, понимаете ли вы код. –

+1

Может быть, я просто не понимаю питона достаточно хорошо, так как я относительно новичок в нем? Я набрал ваш код, продумал его, поймал пропавших парнеров в конце. Но я думал, что глобалы (до вашего редактирования) ссылаются на файл или, возможно, на встроенную переменную python. В любом случае, спасибо за ваше решение. Я пробовал как твои, так и @ Карла. – lango

Смежные вопросы