我们在Perl中有一个相当大的代码库。对于可预见的未来,我们的代码库将保留在Perl中。但是,我们正在考虑添加基于GUI的仪表板实用程序。我们正在考虑用Python编写仪表板(使用tkinter或wx)。但问题是,我们希望利用Python GUI中现有的Perl代码库。
那么......关于如何实现这一点的任何建议?我们正在考虑一些选择:
还有其他想法吗?我很想知道其他人是否遇到过这个问题。不幸的是,此时不能将代码库本身转换为Python。
答案 0 :(得分:7)
我讨厌合唱中的另一个,但是......
当然,我只是说这一切,因为你说“Dashboard”,我读作“Corporate”,然后让我假设一个Microsoft AD网络......
答案 1 :(得分:6)
您可以生成子进程并使用套接字或STDIO等IPC机制,甚至可以嵌入one interpreter in the other。
但是,当Perl提供多个Tk(Tk,Tkx和Tcl::Tk)绑定以及功能强大的Wx binding时,为什么要切换语言?
我已经使用Perl的Tk和Wx库编写和分发了GUI项目。
如果您需要能够创建独立的可执行文件,请查看PAR::Packer,ActiveState's PerlApp和Cava Pacakger。
答案 2 :(得分:5)
尝试使用CPAN分发Python (pyperl)与python代码进行交互。
答案 3 :(得分:2)
好吧,如果你真的想用另一种语言编写GUI(严肃地说,这只是一个坏主意,因为它会花费你的成本而不是让你受益),你应该做的事情如下:
但老实说,我真的建议你看看Perl GTK2绑定,它很棒,包括完全在Perl中实现Gtk类并将其用作C语言编写的函数的参数等功能 - 例如,你可以完全用Perl为gtk树编写模型类。
答案 4 :(得分:1)
如果可能,我会避免语言间的通话;脆弱性和依赖性的大量增加等待着你走这条路。但是,有......
如果必须使用python,Inline::*
系列模块一般都很受欢迎。这允许你在perl脚本中编写python。你仍然需要写perl但它会让你在perl脚本中使用python库。但是,它会使调试变得更加困难。
答案 5 :(得分:1)
我认为任何合格答案的主要标准都涉及现有代码库的细节。如何调用这个Perl代码以及它如何返回它的结果?
一组命令行实用程序通过相当好的文本输出返回结果(“好”,如“适用于进一步的机器解析”或“管道友好”)...应该可以很容易地从任何编程语言调用(和Python特别优秀的subprocess
和multiprocessing
模块。仍然可以使用urlopen2
或mechanize
之类的东西访问在Apache和某些DBMS系统之间分层的Web CGI或其他模块的集合 - 但是绕过Perl代码并编写Python来查询可能更好潜在的(可能是规范的)模型(数据存储)。
如果大部分代码库是一组库或模块......并且您提出的仪表板所需的功能尚未通过某种更高级别的机制(某些命令行界面,网络协议等)公开。那么考虑通过除Perl以外的任何语言与它进行交互,基本上是疯了。 (除非通过一些奇怪且极不可能的命运扭曲,您现有的代码库和预期的实现目标在Parrot下都已稳定。)
让我们问一个不同的,更广泛的问题:您希望在信息中心与现有代码库之间使用哪个界面?
无论您选择何种实施语言,这个问题都至关重要。如果您在Perl中编写仪表板,它仍然需要以某种方式调用您现有的代码库。您可能需要修复代码库,以实现对仪表板的使用支持。在您的代码库支持必要的API(具有命令行或IPC协议调用所需功能,通过任何合理的IPC机制返回结果)的时候......那么您选择的仪表板实现语言将基本上是任意的。
答案 6 :(得分:1)
有趣的项目:我会选择松散耦合并考虑基于XML-RPC或JSON的方法。