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

时间:2018-01-11 14:14:22

标签: python subprocess 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()获取它们?

1 个答案:

答案 0 :(得分:3)

即使子进程是python进程,也无法使用全局变量在它们之间进行通信。

您不能使用multiprocessing.Manager对象,因为您需要2个不同的python引擎(具有不同的功能)。

经典(简单)方法是使用简单的print序列化您的数据(因为您在输出中有一个整数列表),并使用ast.literal_evaljson进行反序列化也有可能)

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