我想知道我如何处理它,我从子进程到父进程得到一个变量/值。
我将子进程作为脚本运行。 父母看起来像是:
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()获取它们?
答案 0 :(得分:3)
即使子进程是python进程,也无法使用全局变量在它们之间进行通信。
您不能使用multiprocessing.Manager
对象,因为您需要2个不同的python引擎(具有不同的功能)。
经典(简单)方法是使用简单的print
序列化您的数据(因为您在输出中有一个整数列表),并使用ast.literal_eval
(json
进行反序列化也有可能)
Callee(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
能够在另一侧重建相同的结构。