I have the following script that will run each script (sequentially) in a directory:
import os
directory = []
for dirpath, dirnames, filenames in os.walk("path\to\scripts"):
for filename in [f for f in filenames if f.endswith(".py")]:
directory.append(os.path.join(dirpath, filename))
for entry in directory:
execfile(entry)
print x
my scripts look like this:
def script1():
x = "script 1 ran"
return x
script1()
When print x
is called, it says x is not defined. I'm just curious if there is a way to return values so that the parent script can access the data.
I'm just curious if there is a way to return values so that the parent script can access the data.
This is why you define functions and return values.
Script 1 should include a function.
def main():
all the various bits of script 1 except the import
return x
if __name__ == "__main__":
x= main()
print( x )
Works the same as yours, but now can be used elsewhere
Script 2 does this.
import script1
print script1.main()
That's the way one script uses another.
You can use the locals argument of execfile(). Write the scripts like this:
def run_script():
ret_value = 2
return ret_value
script_ret = run_script()
And in your main script:
script_locals = dict()
execfile("path/to/script", dict(), script_locals)
print(script_locals["script_ret"])
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With