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

时间:2015-06-05 10:27:59

标签: python python-3.x os.system

我有两个文件:script1.py和script2.py。我需要从script1.py调用script2.py并将script2.py中的值返回给script1.py。但问题是script1.py实际上是通过os运行script2.py。

script1.py:

import os
print(os.system("script2.py 34"))

script2.py

import sys
def main():
    x="Hello World"+str(sys.argv[1])
    return x

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

正如您所看到的,我能够将值输入script2,但不能返回script1。我怎样才能做到这一点?注意:要调用script2.py,就像它的命令行执行一样。这就是我使用操作系统的原因。

2 个答案:

答案 0 :(得分:14)

好的,如果我理解你,你想:

  • 将参数传递给另一个脚本
  • 从另一个脚本检索输出到原始调用者

我建议使用子进程模块。最简单的方法是使用check_output()功能。

  

使用参数运行命令并将其输出作为字节字符串返回。

样本解决方案:

script1.py

import sys
import subprocess
s2_out = subprocess.check_output([sys.executable, "script2.py", "34"])
print s2_out

script2.py:

import sys
def main(arg):
    print("Hello World"+arg)

if __name__ == "__main__":
    main(sys.argv[1])

答案 1 :(得分:6)

从一个python"脚本"返回值的推荐方法另一种方法是将脚本作为Python模块导入并直接调用函数:

import another_module

value = another_module.get_value(34)

其中another_module.py是:

#!/usr/bin/env python
def get_value(*args):
    return "Hello World " + ":".join(map(str, args))

def main(argv):
    print(get_value(*argv[1:]))

if __name__ == "__main__":
    import sys
    main(sys.argv)

您可以导入another_module并从命令行将其作为脚本运行。如果您不需要将其作为命令行脚本运行,则可以删除main()函数和if __name__ == "__main__"阻止。

另见Call python script with input with in a python script using subprocess