我想知道如何处理,即从子流程到父流程获取变量/值.
我正在将子流程作为脚本运行.父母看起来像:
import subprocess
p = subprocess.Popen('abaqus python getData.py', shell=True)
p_status = p.wait()
print b
这个孩子看起来像:
from numpy import *
if __name__ == "__main__":
b = [0,1,2,3] # output is a list of integers
global a = b
我对python完全陌生.我认为问题是,我不能以这种方式存储变量并使它们对父级“公开”吗?我是否必须将它们写为* .txt或类似的内容,并使用numpy.loadtxt()获得它们?
解决方法:
即使子进程是python进程,也无法使用全局变量在它们之间进行通信.
您也不能使用multiprocessing.Manager对象,因为您需要2个不同的python引擎(具有单独的功能).
经典(简便)的方法是使用简单的打印序列化数据(因为您在输出中具有整数列表),然后使用ast.literal_eval反序列化(也可以使用json)
被调用方(getData.py模型):
if __name__ == "__main__":
print([1,2,3,4]) # mock output
呼叫者:
import subprocess,ast
output = subprocess.check_output('abaqus python getData.py', shell=True)
lst = ast.literal_eval(output.decode("ascii"))
现在lst包含[1,2,3,4]
如果您的输出数据比较复杂(列表列表,字典…),则只需组成列表列表,内部带有嵌套字典的字典,然后打印出来即可. ast.literal_eval可以在另一侧重建相同的结构.