IronPython:您使用IronPython而不是标准.NET语言(例如,C#)完成了哪些工作

时间:2009-12-16 07:36:11

标签: python ironpython

我正在学习IronPython和Python一起学习。我很好奇什么样的任务你倾向于使用IronPython来解决比标准.NET语言更频繁的问题。

感谢任何例子。

6 个答案:

答案 0 :(得分:9)

与IronPython完美匹配的一个示例是,您希望在应用程序中包含脚本功能。我一直在研究用户可以直接通过应用程序内python脚本层与整个应用程序类模型交互的系统,它为高级用户提供了很大的灵活性。

一个明显的例子是,当您想在应用程序中公开“钩子”时,用户可以自定义业务规则(例如,在交易系统中创建新交易时执行自定义经纪人费用计算)。 / p>

按要求编辑: 这是一个简单的(模拟)示例。当用户在系统中创建新交易时,系统会检查是否定义了以下Python函数,如果存在,交易会在将函数提交到数据库之前将该函数的结果作为费用添加到其中:

def calculate_broker_fee(trade):
    fee = 0.043 # default value
    if trade.exchange in ["SWX", "EURONEXT"] and \
        trade.instrument.instrument_type == "Bond":
        fee = trade.quantity*0.00234
    return fee

答案 1 :(得分:4)

我刚刚在本月初部署了我的IronPython销售点服务应用程序。服务应用程序是RESTful http服务器,提供查询和服务。对.NET WinForms客户端的事务请求。在一些远程库的帮助下,服务应用程序纯粹在IronPython中实现。

在我看来,Python无疑是编写复杂业务逻辑的最佳语言。这是我的理由。

  1. 语言非常富有表现力。我可以为内部DSL提出无穷无尽的想法,使我的业务逻辑更简单,更容易理解。

  2. 这是互动的。故障排除和逻辑测试可以交互方式完成。

  3. 这是动态的。这是自由。没有xml配置。没有管道。没有编译。

  4. 我可以在我最喜欢的编辑器中工作。

  5. 大多数怀疑论者总是提到“代码完成”和“调试器”。我有时会想念他们。但是,我知道我故意放弃了这些便利,这是一个更加重要的因素,可理解性。通过适当的单元测试和日志记录,我会选择IronPython作为我的业务逻辑的任何语言。

    更新

    有时候,我会尝试使用Ironpython脚本来记录用户问题,就像这样的客户端一样:

    >> from boon.service import client
    >> CASH_PAYMENT_TYPE = '000000011'
    >> cl = client.Client('http://pos-server/bin?posB2K')
    >> cl.connect('user', 'password')
    >> order = cl.workspace('pos.Order')
    >> order.load('1312')
    >> payments = order.dataset.Tables['POS_PAYMENTS']
    >> payments.Rows[0]['PAYMENT_TYPE_ID'] = CASH_PAYMENT_TYPE
    >> order.save()
    

    有时,我通过编写服务器对象来调查错误,如下所示:

    >> from boon import pos
    >> pos.register_pos_service(debug=True)
    >> from boon.service import get_instance
    >> possvc = get_instance('pos')
    >> print possvc.store['POS_PAYMENTS'] \
    ..   .where(lambda r: r.POS_HD_ID == 1312) \
    ..   .include('PAYMENT_TYPE_ID', 'PAY_AMT') \
    ..   .list()
    [('000000011', 1520)]
    

    您可能会发现代码不太优雅,因为我更喜欢将我的工作基于ADO.NET DataSet。但是,对于Windoows Forms客户端来说,它更简单。

答案 2 :(得分:3)

在白天的工作中,对于那些对.bat文件来说过多的构建过程而言,它是我的标准语言,并且不足以要求单独的可执行文件。这包括任何可以使用一些XML处理或反射的东西 - 例如,生成Wix文件,系统处理32位和64位安装。它在这个角色中胜过PowerShell,因为IronPython是在构建机器上的XCOPY安装。

对于针对不熟悉或复杂的API(WMI和Active Directory是我常用的)的代码片段进行原型设计,或者使用这些API诊断代码中的问题(比如嗅出当你发生的奇怪事件)时,它也非常有用。在域控制器上,而不是在其他地方)。

答案 3 :(得分:0)

为MS Group Chat Server插件创建了一个加载工具。 GC API位于C#中。我把它包装成一个dll并且FePy加载它。主要应用程序,配置脚本等都在FePy中。

答案 4 :(得分:0)

我将IronPython用于几个不同的目的:

  • 当我需要编写脚本并调用.NET库时,或者当脚本足够复杂以保证真正的编程语言时,Powershell的替代方案。
  • 嵌入.NET应用程序以获取可编写脚本的插件。
  • 以立即模式对.NET库进行原型设计和测试。这比在C#
  • 中制作测试项目更容易

答案 5 :(得分:0)

我们对SharePoint的小型管理工具使用了很多。特别是它非常适合探索真实数据的API(以及所有现实生活中的怪癖)。开发迭代速度更快,您无法始终在生产服务器上安装Visual Studio。