Python:在父脚本中访问Subprocess(Child)脚本中的变量

时间:2015-10-28 12:39:54

标签: python shell output abaqus

使用Python 2.7,我有一个执行子进程脚本的主脚本。 我的问题是如何从子流程中捕获某些变量,例如向量:

vec_1, vec_2, vec_3

我知道可以使用stdout从脚本中获取subprocess.communicate()作为字符矩阵,但这并不符合我的预期目的。这是我到目前为止所尝试的内容。

父脚本:

import subprocess
if __name__ == "__main__":
    process = subprocess.Popen(["abaqus", "python", "childscript.py", \
        "file"], shell=True, stdout=subprocess.PIPE)
    process.wait()
    pr = process.communicate()  

子子进程:

def function(a):
    return vec_1, vec_2, vec_3

if __name__ == '__main__':
    function()

奖励标记如果有人知道如何在不使用shell = True的情况下执行子进程。它似乎只能用于shell,因为它涉及执行.bat文件。

修改

澄清为什么我不直接将该函数导入主脚本:

在子进程中执行的程序,Abaqus有它自己的python接口,它允许使用python脚本来访问它的数据输出。因此,python脚本应该通过程序运行,不能集成到main。

2 个答案:

答案 0 :(得分:0)

凌乱的方法可能适用于传递单个值.......

import subprocess
if __name__ == "__main__":
    process = subprocess.Popen(["abaqus", "python", "child.py", \
        "file"], shell=True, stdout=subprocess.PIPE)
    process.wait()
    x= process.stdout.read()
    exec(x)
    print vec_1
    print vec_2

Child.py:

def function(a):
    vec_1=a*2
    vec_2=a*3     
    print("vec_1=" + str(vec_1))
    print("vec_2=" + str(vec_2)) 

if __name__ == '__main__':
    num=4        
    function(num)

答案 1 :(得分:0)

为了您的兴趣,我想做的事情是不可能的。如果它只是一个执行子脚本的情况,那么Anentropic是正确的 - 多处理模块是一个更好的方法。

由于我的问题是关于具有python接口的第三方程序,遗憾的是它是不可能的。

参考:https://www.researchgate.net/post/How_can_I_access_the_ABAQUS_python_API_from_outside_ABAQUS_cae