Передать переменную между скриптами python
Я уверен, что это очень просто, но я не смог заставить его работать правильно. Мне нужно, чтобы мой главный python script вызывал другой python script и передавал переменные из исходного script в script, который я назвал
Итак, для упрощенного примера мой первый script есть,
first.py
x = 5
import second
и мой второй script есть,
second.py
print x
и я ожидаю, что он будет печатать x, но я получаю
NameError: name 'x' is not defined
Я не уверен, что импорт правильный путь для достижения этого, но если кто-то может пролить свет на него простым способом, это было бы здорово!
спасибо,
ИЗМЕНИТЬ
Прочитав комментарии, я подумал, что буду расширять свой вопрос. Ответ Aswin Murugesh устраняет проблему импорта, с которой я столкнулся, однако решение не имеет желаемого результата, так как я не могу передать элементы в списке таким образом.
В first.py у меня есть список, который обрабатываю следующим образом
for insert, (list) in enumerate(list, start =1):
'call second.py passing current list item'
Я хотел передать каждый элемент в списке во второй файл python для дальнейшей обработки (веб-скребок), я не хотел делать это в first.py, поскольку это означает, что это основная программа сканирования, которая затем вызывает другие программы. Надеюсь, теперь это имеет больше смысла.
Спасибо за комментарии.
Ответы
Ответ 1
Когда вы вызываете script, вызывающий script может получить доступ к пространству имен вызываемого script. (В вашем случае first может получить доступ к пространству имен второй.) Однако то, о чем вы просите, это наоборот. Ваша переменная определена в вызывающем script, и вы хотите, чтобы вызываемый script имел доступ к пространству имен вызывающего абонента.
Ответ уже указан в этом сообщении SO в самом вопросе:
Доступ к пространству имен вызывающего модуля
Но я просто объясню это здесь в вашем контексте.
Чтобы получить то, что вы хотите в своем случае, запустите вызываемый script со следующей строкой:
from __main__ import *
Это позволяет ему получить доступ к пространству имен (все переменные и функции) вызывающего script.
Итак, теперь ваш вызов script, как и раньше:
x=5
import second
а вызываемый script:
from __main__ import *
print x
Это должно работать нормально.
Ответ 2
используйте следующий script:
first.py:
x=5
second.py
import first
print first.x
это напечатает значение x. Всегда импортированные данные script должны ссылаться на имя script, например, в first.x
Ответ 3
Попробуйте использовать exec
Python3.5:
first.py
x=5
exec(open('second.py').read())
second.py
print(x)
Вы также можете передать x, используя:
x=5
myVars = {'x':x}
exec(open('second.py').read(), myVars)
Не уверен, что это хороший способ.