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

Nil*_*ils 5 python subprocess popen

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

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

import subprocess
p = subprocess.Popen('abaqus python getData.py', shell=True)
p_status = p.wait()
print b
Run Code Online (Sandbox Code Playgroud)

孩子长这样:

from numpy import *

if __name__ == "__main__":

    b = [0,1,2,3]  # output is a list of integers
    global a = b
Run Code Online (Sandbox Code Playgroud)

我对python完全陌生。我认为问题是,我不能以这种方式存储变量并使它们“公开”给父级?我是否必须将它们写在 *.txt 或类似的文件中并使用 numpy.loadtxt() 获取它们?

Jea*_*bre 4

即使子进程是一个Python进程,你也不能使用全局变量在它们之间进行通信。

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

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

被调用者(getData.py模型):

if __name__ == "__main__":
    print([1,2,3,4])  # mock output
Run Code Online (Sandbox Code Playgroud)

呼叫者:

import subprocess,ast
output = subprocess.check_output('abaqus python getData.py', shell=True)
lst = ast.literal_eval(output.decode("ascii"))
Run Code Online (Sandbox Code Playgroud)

现在lst包含[1,2,3,4]

如果您的输出数据更复杂(列表列表、字典...),只需组成列表列表、内部嵌套字典的字典...并打印它。ast.literal_eval能够在另一侧重建相同的结构。