从一个脚本返回值到另一个脚本

4 投票
3 回答
13919 浏览
提问于 2025-04-17 02:27

我有一个脚本,它会依次运行一个文件夹里的每个脚本:

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

我的脚本长这样:

def script1():
    x = "script 1 ran"
    return x

script1()

当调用 print x 时,它会提示 x 没有定义。我只是想知道有没有办法返回一些值,这样父脚本就可以访问这些数据。

3 个回答

1

x 这个变量只在 script1 这个函数里面有效,所以在外面是看不到它的。如果你把 script1 里面的代码放到文件的最上面,应该就能正常工作了。

3

你可以使用execfile()的locals参数。把脚本写成这样:

def run_script():
    ret_value = 2
    return ret_value

script_ret = run_script()

然后在你的主脚本中:

script_locals = dict()
execfile("path/to/script", dict(), script_locals)
print(script_locals["script_ret"])
8

我只是好奇有没有办法返回一些值,让父脚本可以访问这些数据。

这就是为什么你需要定义函数并返回值的原因。

脚本1应该包含一个函数。

def main():
    all the various bits of script 1 except the import 
    return x

if __name__ == "__main__":
    x= main()
    print( x )

这样做和你的脚本一样,但现在可以在其他地方使用了。

脚本2就是这么做的。

import script1
print script1.main()

这就是一个脚本如何使用另一个脚本的方法。

撰写回答