子流程.Popen,从子进程(子进程)获取变量



我想知道如何处理它,我从子进程到父进程获得一个变量/值。

我正在将子进程作为脚本运行。父级看起来像:

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能够在另一侧重建相同的结构。

最新更新