Передать переменную между скриптами 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)

Не уверен, что это хороший способ.