Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Return values from one script to another script

Tags:

python

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.

like image 797
Snaxib Avatar asked Sep 12 '25 18:09

Snaxib


2 Answers

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.

like image 154
S.Lott Avatar answered Sep 15 '25 09:09

S.Lott


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"])
like image 39
Staven Avatar answered Sep 15 '25 07:09

Staven