Nil*_*ils 5 python subprocess popen
我想知道如何处理它,我从子进程到父进程获得一个变量/值。
我正在将子进程作为脚本运行。父级看起来像:
import subprocess
p = subprocess.Popen('abaqus python getData.py', shell=True)
p_status = p.wait()
print b
Run Code Online (Sandbox Code Playgroud)
孩子长这样:
from numpy import *
if __name__ == "__main__":
b = [0,1,2,3] # output is a list of integers
global a = b
Run Code Online (Sandbox Code Playgroud)
我对python完全陌生。我认为问题是,我不能以这种方式存储变量并使它们“公开”给父级?我是否必须将它们写在 *.txt 或类似的文件中并使用 numpy.loadtxt() 获取它们?
即使子进程是一个Python进程,你也不能使用全局变量在它们之间进行通信。
您也不能使用multiprocessing.Manager对象,因为您需要 2 个不同的 python 引擎(具有单独的功能)。
经典(且简单)的方法是使用简单的方法序列化数据print(因为输出中有一个整数列表),并使用ast.literal_eval(json也可以)反序列化
被调用者(getData.py模型):
if __name__ == "__main__":
print([1,2,3,4]) # mock output
Run Code Online (Sandbox Code Playgroud)
呼叫者:
import subprocess,ast
output = subprocess.check_output('abaqus python getData.py', shell=True)
lst = ast.literal_eval(output.decode("ascii"))
Run Code Online (Sandbox Code Playgroud)
现在lst包含[1,2,3,4]
如果您的输出数据更复杂(列表列表、字典...),只需组成列表列表、内部嵌套字典的字典...并打印它。ast.literal_eval能够在另一侧重建相同的结构。
| 归档时间: |
|
| 查看次数: |
1987 次 |
| 最近记录: |