开发者

Return values from one script to another script

I have the following script that will run each script (sequentially) in a directory:

imp开发者_StackOverflowort 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"])


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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜