如何从 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()
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()