如何从python中的另一个脚本中的函数中收集返回值?

时间:2015-11-09 19:47:26

标签: python subprocess

 fw_test.py

 def _testmethod_():
     x = []
     y = 0
     while y !=5:
        x.append(y)
        y +=1
        return x

 t = _testmethod_()

 main_test.py

 import subprocess
 p = subprocess.call(['python', 'main_test.py'])

根据指南,我无法将fw_test.py导入main_test.py。我希望能够将_testmethod_()fw_test.py返回的值存储在main_test.py中的变量中。我了解到,通过子进程,我可以运行fw_test.py, but that is not enough for me.有没有办法解决这个问题?

编辑:无法将fw_test.py导入main_test.py的原因是有许多测试脚本,如fw_test.py,它会根据测试不断更改。 main_test.py应该是一个通用框架,它具有通过读取fw_test.py的返回值来评估传递或失败的测试的基本函数(返回值为True/False)。如果我在文件的顶部导入脚本,我认为它将不再是通用的。我对其他建议持开放态度。

为什么是downvotes?

3 个答案:

答案 0 :(得分:2)

您可以使用subprocess.check_output来获取另一个脚本编写的输出

文件“b.py”将其输出写入stdout

print("hi")
print(1)

文件“a.py”执行“b.py”作为子流程

import subprocess
a = subprocess.check_output(["python", "/tmp/b.py"])
print(a.decode('utf-8'))

注意:check_output返回的值是一个字节数组,应该解码以将其转换为字符串

从命令行执行“a.py”

$ python a.py
hi
1

免责声明:这是针对给定(针对培训)问题(不是最佳)问题的最简单解决方案。从技术上讲,我将输出打印到stdout并在父进程中捕获它。为了解决同样的问题,应该使用IPC,RPC等更严重的问题机制。

答案 1 :(得分:0)

如果您不能使用import fw_test声明;你可以use importlib.import_module() instead来获取fw_test.testmethod()函数的返回值:

import importlib

fw_test = importlib.import_module('fw_test')
value = fw_test.testmethod()

答案 2 :(得分:-2)

最简单的方法可能是将返回值放入一个文件中,然后让你的主要选择它。

fw_test.py

def _testmethod_():
    x = []
    y = 0
    while y !=5:
       x.append(y)
       y +=1
       return x

t = _testmethod_()

with open("fileToStoreValue.txt", 'w') as f:
    f.write(t)

main_test.py

import subprocess
p = subprocess.call(['python', 'main_test.py'])
t = eval(open("fileToStoreValue.txt", 'r').read().strip())

请注意,我在阅读时包含了strip,以防止您获取任何尾随的新行。

另外请记住,如果两个python文件都在同一个目录中,这将按照写入的方式工作。如果它们的位置不同,则需要在开放语句中指定fileToSTtoreValue.txt的路径。