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

How to gather return value from function in another script in python?

 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 编辑的值 return 存储在 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 读取 return 值来评估测试通过或失败的基本功能(return 值是 True/False).我认为,如果我在文件顶部导入脚本,它将不再是通用的。我愿意接受其他建议。

为什么反对票?

最简单的方法可能是将 return 值放入一个文件中,然后让您的 main 提取它。

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 的路径。

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

文件 "b.py" 将其输出写入标准输出

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

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

如果不能使用import fw_test语句;您可以 use importlib.import_module() instead,从 fw_test.testmethod() 函数中获取 return 值:

import importlib

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