-2

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

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中。

4

2 回答 2

0

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

由于我的问题是关于具有 python 接口的 3rd 方程序,不幸的是这是不可能的。

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

于 2015-11-14T16:34:08.850 回答
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

孩子.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)
于 2015-10-30T00:05:30.210 回答