Pass variable between python scripts

To avoid namespace pollution, import the variables you want individually: from __main__ import x, and so on. Otherwise you'll end up with naming conflicts you weren't aware of.


use the following script:

first.py:

x=5

second.py

import first
print first.x

this will print the x value. Always imported script data should be referenced with the script name, like in first.x


When you call a script, the calling script can access the namespace of the called script. (In your case, first can access the namespace of second.) However, what you are asking for is the other way around. Your variable is defined in the calling script, and you want the called script to access the caller's namespace.

An answer is already stated in this SO post, in the question itself:

Access namespace of calling module

But I will just explain it here in your context.

To get what you want in your case, start off the called script with the following line:

from __main__ import *

This allows it to access the namespace (all variables and functions) of the caller script.

So now your calling script is, as before:

x=5
import second

and the called script is:

from __main__ import *
print x

This should work fine.


Try use exec Python3.5:

first.py

x=5
exec(open('second.py').read())

second.py

print(x)

You can also pass x by using:

x=5
myVars = {'x':x}
exec(open('second.py').read(), myVars)

Not sure if this is a good way.

Tags:

Python