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