如何在Linux中创建可编写脚本的应用程序

时间:2010-03-12 15:15:00

标签: linux scripting

我用C ++编写了一个应用程序,它采用复杂的二进制文件格式并将其转换为人类可读的文本。编辑完文本后,您可以将其重新编译为二进制文件格式。

如果应用程序的内部对象模型是可编写脚本的,那么这将更有用。在Windows上我会使用COM或.Net公开对象,但我希望这可以在Linux上运行。我可以嵌入脚本语言,但这是一项相当多的工作,并限制用户使用我选择的脚本语言。理想情况下,我正在寻找一种从我的应用程序中公开可编写脚本的DOM的方法:

  • 广泛支持脚本语言(无需编写特定于语言的包装器)
  • 跨平台(但Linux支持最重要)
  • 进行中(但这不是必需的)

更多细节:我希望找到一种能为COM提供类似好处的解决方案。也就是说,一旦应用程序的内部对象通过COM公开,它们就可以被任何脚本语言操纵,就像JavaScript可以操作HTML DOM一样。对象和方法很容易被发现,许多IDE为您的对象提供自动命令完成。客户端的可用性很重要。

3 个答案:

答案 0 :(得分:3)

您可能会发现D-Bus有用。它提供了一个面向对象的API,具有激活支持。

答案 1 :(得分:3)

通常的方法是公开一些CLI命令,并允许用户在用户编写的任何shell /脚本语言中使用它们;见f.e. imagemagick,它公开了许多命令,用于在格式之间转换图像并应用转换。这适用于任何操作系统。

这也适用于交互式程序,尽管很少见。您可以使用D-BUS接口(在GNOME和KDE中越来越受欢迎),尽管它更适用于处理事件或发送简单命令。您可能希望创建一个交互式或类似守护进程的程序,它暴露D-BUS(甚至简单的基于套接字/管道的)接口,以及一些包装发送命令的简单CLI调用,以便界面更简单。请参阅moc / mocp(“控制台播放器上的音乐”)或xmms2。这适用于任何操作系统,但通常需要一些时间来计算不同操作系统的实现细节。

不要害怕嵌入完整的语言。 LuaGuile等语言的设计使其非常易于嵌入且非常强大。对一种这样的语言进行标准化并不总是坏事,因为这意味着用户之间的代码可重用性更高......而且只有当您计划用户将大量代码编写为插件时,语言才真正重要。

有一些方法可以使用特殊库将API公开给多种脚本语言。你可以阅读它们f.e.在这里:Kross@Wikipedia。我对他们没有经验。

我假设您的程序将是闭源的...然后我可以看到的最后一个选项是公开某种API / ABI接口,可以被用户的C程序使用(例如编译到动态库)。这样,用户就可以为他们想要的任何语言制作包装器,而且他们可以使用普通的C编写代码以提高速度。这个解决方案可能难以移植,但它为您(和您的用户)提供了灵活性。

请注意,过度设计脚本化很容易:最好将编程结构留给外部语言,并且只提供与程序交互的简单方法。我见过程序为脚本语言添加了自己的循环功能,即使它们没有为用户添加任何值:f.e。能够传递多个图像以立即转换,即使它没有使处理更快。

答案 2 :(得分:0)

我不确定你的“脚本”是什么意思。你的意思是你希望它有一个外部接口(有点像API),其他程序/脚本可以访问?如果是,那么我认为你最好的选择是使用套接字(Unix或TCP)。它们是跨平台的,大多数脚本语言都有一些通过套接字进行通信的方式(我用Python,PHP和Java来玩它们)。

作为旁注,如果您决定使用套接字,那么实现某种标准化协议(例如基于HTTP的XML-RPC)会很不错。这将使您的“API”更容易使用。

同样,我希望我明白你的“脚本”是什么意思。如果没有,请忽略我的回答。