4

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.

1

3 Answers 3

9

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.

Sign up to request clarification or add additional context in comments.

Comments

3

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"]) 

Comments

1

x is local to the script1 function, so it's not visible in the outer scope. If you put the code inside script1 at the top level of the file, it should work.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.