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()获得它们?

解决方法:

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

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

经典(简便)的方法是使用简单的打印序列化数据(因为您在输出中具有整数列表),然后使用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可以在另一侧重建相同的结构.

上一篇:如何从python运行可执行文件并传递所需的参数?


下一篇:如果命令无效,在Python 3.4中调用子流程并处理错误?