Python:从父脚本中的子进程(子)脚本访问变量
Python: Accessing the variables from a Subprocess (Child) script, in the parent script
使用Python 2.7,我有一个执行子进程脚本的主脚本。 我的问题是如何从子进程中捕获某些变量,例如载体:
vec_1, vec_2, vec_3
我知道可以使用 subprocess.communicate()
从脚本中获取 stdout
作为字符矩阵,但这不符合我的预期目的。这是我到目前为止尝试过的方法。
父脚本:
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脚本应该运行通过程序,不能集成到主程序中。
可能适用于传递单个值的混乱方法......
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)
为了您的利益,我想做的事情是不可能的。如果这只是一个执行子脚本的情况,那么 Anentropic 是正确的——多处理模块是更好的方法。
由于我的问题是关于具有 python 接口的第 3 方程序,不幸的是这是不可能的。
参考:https://www.researchgate.net/post/How_can_I_access_the_ABAQUS_python_API_from_outside_ABAQUS_cae
使用Python 2.7,我有一个执行子进程脚本的主脚本。 我的问题是如何从子进程中捕获某些变量,例如载体:
vec_1, vec_2, vec_3
我知道可以使用 subprocess.communicate()
从脚本中获取 stdout
作为字符矩阵,但这不符合我的预期目的。这是我到目前为止尝试过的方法。
父脚本:
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脚本应该运行通过程序,不能集成到主程序中。
可能适用于传递单个值的混乱方法......
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)
为了您的利益,我想做的事情是不可能的。如果这只是一个执行子脚本的情况,那么 Anentropic 是正确的——多处理模块是更好的方法。
由于我的问题是关于具有 python 接口的第 3 方程序,不幸的是这是不可能的。
参考:https://www.researchgate.net/post/How_can_I_access_the_ABAQUS_python_API_from_outside_ABAQUS_cae