IronPython:您曾经用IronPython而不是标准的.NET语言(例如C#)做过哪些工作
我正在和Python一起学习IronPython。我很好奇与标准的.NET语言相比,您更倾向于使用IronPython处理哪些类型的任务IronPython:您曾经用IronPython而不是标准的.NET语言(例如C#)做过哪些工作,python,ironpython,Python,Ironpython,我正在和Python一起学习IronPython。我很好奇与标准的.NET语言相比,您更倾向于使用IronPython处理哪些类型的任务 感谢您提供的示例。一个与IronPython完美匹配的示例是,您希望在应用程序中包含脚本能力。我一直在开发一些系统,在这些系统中,用户可以通过应用程序内python脚本层直接与整个应用程序类模型交互,这为高级用户提供了极大的灵活性 一个具体的例子是,当您希望在应用程序中公开“钩子”时,用户可以自定义业务规则(例如,在交易系统中创建新交易时,进行自定义经纪人费用
感谢您提供的示例。一个与IronPython完美匹配的示例是,您希望在应用程序中包含脚本能力。我一直在开发一些系统,在这些系统中,用户可以通过应用程序内python脚本层直接与整个应用程序类模型交互,这为高级用户提供了极大的灵活性 一个具体的例子是,当您希望在应用程序中公开“钩子”时,用户可以自定义业务规则(例如,在交易系统中创建新交易时,进行自定义经纪人费用计算) 按请求编辑: 下面是一个简单的(模拟的)示例。当用户在系统中创建新交易时,系统会检查是否定义了以下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
在日常工作中,它是我的标准语言,用于那些对.bat文件来说太多的构建过程,并且不够重,不需要单独的可执行文件;这包括任何可能使用一点XML处理或反射的东西——例如,通过系统处理32位和64位安装来生成Wix文件。它在这个角色上击败了PowerShell,因为IronPython是一个安装到构建机器上的XCOPY
它对于针对不熟悉或复杂的API(WMI和Active Directory对我来说是常见的)创建代码片段原型,或者使用这些API诊断代码中的问题(比如嗅出在域控制器上而不是在其他地方发生的奇怪现象)也非常有用.为MS Group聊天服务器插件创建了加载工具。gcapi是C#格式的。我将其包装到一个dll中,并让FePy加载它。主应用程序、配置脚本等都在FePy中。我刚刚在本月初部署了IronPython销售点服务应用程序。服务应用程序是一个RESTful http服务器,向.NET WinForms客户端提供查询和事务请求。在某些远程处理库的帮助下,服务应用程序纯粹是用IronPython实现的 在我看来,Python无疑是编写复杂业务逻辑的最佳语言。以下是我的理由
>> 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)]
有时,我会通过编写服务器对象脚本来调查bug,如下所示:
>> 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数据集进行工作。但是,Windoows窗体客户端更简单。我使用IronPython有几个不同的用途:
- 当我需要编写脚本并调用.NET库时,或者当脚本复杂到足以保证使用真正的编程语言时,这是Powershell的替代方案
- 在.NET应用程序中嵌入可编写脚本的插件
- 在即时模式下原型化和测试.NET LIB。这比用C编写测试项目要容易得多#