我有一个场景,我绘制网络并在基于swing的GUI上设置所有参数,然后我必须将此网络转换为基于python的脚本,另一个框架读取并以虚拟机的形式实现此网络。
这里有一个例子:
from mininet.topo import Topo, Node
class MyTopo( Topo ):
def *__init__*( self, enable_all = True ):
super( MyTopo, self ).__init__()
Host = 1
Switch = 2
self.add_node( Switch, Node( is_switch=True ) )
self.add_node( Host, Node( is_switch=False ) )
self.add_edge( Host, Switch )
self.enable_all()
topos = { 'mytopo': ( lambda: MyTopo() ) }
它只是将host
连接到switch
并在python框架上实现此拓扑。
现在,为了在Java GUI上实现绘制的网络,我正在做的是:
我只是从GUI中获取信息并使用Java代码创建一个类似上面的新python文件,然后使用Java中的ProcessBuilder
类在mininet中运行此文件,这在某种程度上可以正常工作。
我想知道,这是正确而强大的方式,我是如何做到这一点,或者我应该进一步研究java-python网桥,比如场景更有效,或者说更专业。
编辑:
我想知道的选项是:
以一种众所周知的格式(可能是yaml?)序列化GUI,可以通过python反序列化,然后在python中添加其他功能,将该信息传递给该脚本。
添加Java-Python桥接器直接从代码中执行此操作?
还有其他想法吗?我应该怎么做,或者我擅长这里所做的一切。
答案 0 :(得分:1)
我建议使用易读的跨语言数据格式,如JSON。 Python和Java对JSON有很好的支持。我使用这种技术完成了PHP,Java和Python之间的集成。你所做的就像code generation这样也是一种有效的方法,但却有其缺点。以下是两种方法的优点:
代码生成优点/缺点
数据交换(JSON)优点/缺点
答案 1 :(得分:0)
如果您的Python代码依赖于纯Python库,那么您可以使用embedded Jython。
我的首选是将配置序列化为不可知格式的第一选择。 从Java编写Python源代码将难以维护。
如果您决定序列化,请考虑在Java端使用JAXB或类似的XML模式来构建XML中的严格数据交换格式。然后,您可以使用PyXB将XML转换回Python对象。