使用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。
答案 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