我想知道如何处理它,我从子进程到父进程获得一个变量/值。
我正在将子进程作为脚本运行。父级看起来像:
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 引擎(具有单独的功能(。
经典(和简单(的方法是使用简单的print
序列化数据(因为输出中有一个整数列表(,并使用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
能够在另一侧重建相同的结构。