我的Windows 7机器上安装了Mercurial 1.3.我没有安装python,但Mercurial似乎没问题.
它是如何工作的?
此外,是否可以强制Mercurial在IronPython上运行并且它是否兼容?
谢谢.
我正在学习IronPython和Python一起学习.我很好奇你倾向于使用IronPython来处理比标准.NET语言更频繁的任务.
谢谢你的任何例子.
好的,这里有一些简单的观点.PyBinding带有这个脚本:
def IsNotNull(value):
return value is not None
Run Code Online (Sandbox Code Playgroud)
它很接近,但我想要的是这个.
bool IsNotNullOrEmpty(string value) {
return (value != null) && (value.Length > 0 );
}
Run Code Online (Sandbox Code Playgroud) 我对.net的动态语言运行时非常感兴趣,并且看到IronRuby/IronPython是建立在它之上的.我找不到一些在c#中使用Ruby/Python动态的例子,这是我真正感兴趣的.
我看过微软的视频,它使用c#4的动态从Silverlight中调用JavaScript,只是想知道在web/windows窗体中调用Ruby/Python是多么容易?我知道Umbraco在某个地方有一个python实现,这是可能的,但不确定如何?
谢谢.
我想以这样一种方式托管动态语言运行时(DLR),以便在其中运行任意脚本的用户不能使该进程失效?
在DLR托管规范描述了如何举办DLR在一个单独的ApplicationDomain.这允许拆除和卸载脚本运行时并通过CAS限制某些操作(例如,我可以限制文件系统访问或禁止使用反射).
但有没有办法,例如: - 限制脚本使用的最大内存量? - 限制脚本创建的线程数? - 检测死锁脚本?
我认为使用为SQL Server开发的非托管.net托管API可以实现这种精细控制.这是方向吗?是否有这种通用.net沙盒的开源项目?
以下是我发现的一些可能有用的参考资料:
.net4.0
mytest.py
def Add (a, b):
return a+b
Run Code Online (Sandbox Code Playgroud)
我可以在C#4中使用它,像这样:
ScriptRuntime runtime = Python.CreateRuntime();
dynamic script = runtime.UseFile("mytest.py");
Console.WriteLine(script.Add(1, 3));
Run Code Online (Sandbox Code Playgroud)
但是,我如何在F#中使用动态?
open System
open Microsoft.Scripting.Hosting
open IronPython.Hosting
let call a b=
let runtime = Python.CreateRuntime()
let script = runtime.UseFile("mytest.py")
script.Add(a,b)
Run Code Online (Sandbox Code Playgroud) 我正在从数据库加载IronPython脚本并执行它.这适用于简单的脚本,但导入是一个问题.如何拦截这些导入调用,然后从数据库加载适当的脚本?
编辑:我的主要应用程序是用C#编写的,我想在不编辑Python脚本的情况下拦截C#端的调用.
编辑:从我已经完成的研究来看,创建自己的PlatformAdaptationLayer看起来就像你应该实现它的方式,但它在这种情况下不起作用.我已经创建了自己的PAL,在我的测试中,我的FileExsists方法会在脚本中的每次导入时被调用.但由于某种原因,它永远不会调用该OpenInputFileStream方法的任何重载.通过IronPython源,一旦FileExists返回true,它就会尝试在路径上找到文件本身.所以这看起来像死路一条.
在Iron Python中执行chdir命令时出现"路径中的非法字符"错误.这是在我的代码运行时发生的,但即使在Iron Python控制台中也存在这个问题.我正在使用nt模块,因为在代码中os模块不起作用(似乎是一个已知问题).
做一点点玩它就会发现"非法字符"实际上是bin这个词.下面是控制台中的文本,显示我只有在导航到bin目录时才会收到错误.
这是一个例子
>>> nt.chdir('c:\Users\xxxxx\Documents\Visual Studio 2010\Projects\xxx')
>>> nt.chdir('c:\Users\xxxxx\Documents\Visual Studio 2010\Projects\xxx\Directory')
>>> nt.chdir('c:\Users\xxxxx\Documents\Visual Studio 2010\Projects\xxx\Directory\bin')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: Illegal characters in path.
Run Code Online (Sandbox Code Playgroud)
更糟糕的是我将导航到一个完全不同的目录(甚至没有bin目录)并尝试导航到子目录"bin",我仍然会得到错误!
有任何想法吗?
我想System.Array在IronPython中添加(算术)两个大元素元素并将结果存储在第一个数组中,如下所示:
for i in range(0:ArrA.Count) :
arrA.SetValue(i, arrA.GetValue(i) + arrB.GetValue(i));
Run Code Online (Sandbox Code Playgroud)
但是,这似乎很慢.有C背景我想使用指针或迭代器.但是,我不知道如何快速应用IronPython习语.我不能使用Python列表,因为我的对象严格来自System.Array类型.类型是3d浮点数.
什么是紧固件/计算此计算的快速方法?
编辑:
例如,在C#中(从v6开始)我可以说:
mass = (vehicle?.Mass / 10) ?? 150;
Run Code Online (Sandbox Code Playgroud)
如果有车辆,则将质量设置为车辆质量的十分之一;如果车辆为空,则设置为150(或者如果Mass属性为可空类型,则为零质量).
我可以在我的C#应用程序的脚本中使用Python(特别是IronPython)中的等效构造吗?
这对于显示可以被其他值修改的值的默认值特别有用 - 例如,我可能在我的星舰的脚本中定义了一个装甲组件,它总是消耗其安装的船上可用空间的10%,它的其他属性也可以缩放,但我想显示装甲大小,生命值,成本等的默认值,这样你就可以将它与其他船舶组件进行比较.否则,我可能不得不写一个复杂的表达式进行空检查或两次,就像我在V6之前在C#中所做的那样.
ironpython ×10
python ×4
c#-4.0 ×2
ironruby ×2
asp.net ×1
dynamic ×1
f# ×1
import ×1
iterator ×1
mercurial ×1
system.array ×1
umbraco-blog ×1