我有以下脚本将在目录中按顺序运行每个脚本:
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。我只是好奇是否有办法返回值,以便父脚本可以访问数据。
答案 0 :(得分:7)
我很好奇是否有办法返回值,以便父脚本可以访问数据。
这就是定义函数和返回值的原因。
脚本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()
这就是一个脚本使用另一个脚本的方式。
答案 1 :(得分: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"])
答案 2 :(得分:1)
x
是script1
函数的本地函数,因此在外部作用域中不可见。如果您将代码放在script1
内的文件的顶层,它应该可以正常工作。