有没有办法抑制,停止或以其他方式控制PyCharm中后台任务的设置或显示?选择IronPython解释器会导致它在每次选择解释器时更新骨架(貌似),通常需要20-30分钟才能完成,这使得IDE几乎无法使用.大多数情况下,我甚至无法继续正常工作,因为在操作过程中大多数上下文菜单都被禁用.
是否可以在IronPython中使用LINQ类型和扩展方法?
如果是这样的话?还有更多的pythonic做同样的事情吗?
我目前正在学习铁心和爱,但我正在寻求继续使用notepad ++和cmd.exe,并尝试使用一些更多的果汁.
我最近了解到,铁蟒工作室不支持铁蟒2,这使我的选择更加困难.
他们的任何IDE用于windows都是好的铁蟒2开发吗?
虽然F#和IronPython语言在技术上不同,但我认为它们的潜在用途之间存在很大的重叠.什么时候比另一个更适用?
到目前为止,我认为F#在计算上更有效率,而IronPython从Python继承了更好的库.我很高兴得到纠正.
有一个相关的问题是F#to IronPython/IronRuby,因为C#是VB.NET的?但大多数答案都是关于语言范式而不是它们的实际适用性.
编辑:我想我应该添加更多背景.我一般都对Python有很好的经验,并且刚刚在一些犹豫不决的函数编程步骤之后学习了F#,主要是在Erlang中.我目前觉得能够继续使用Python或F#.我想决定我应该使用哪一个以及在哪里.例如:
heap模块,它在标准的F#/ .net库中不可用.指向IronPython.因此,问题归结为:除了偏好一种范式而不是另一种或某些团队或公司偏好之外,还有什么理由可以让你选择F#而不是IronPython,反之亦然?假设你对两者都有同样的信心?或者它们是否完全等同于所有实际目的?
编辑:好的,看起来你认为这是一个愚蠢的问题,低估它和答案.但至少它是诚实的.所以请提示一下.是不是可以区分这两者,还是我通过提出这个问题进入一些秘密禁忌?如果它看起来像一个巨魔可以有人请通知我?
IronPython如何从python.org堆叠到Python的默认Windows实现?如果我正在学习Python,我是否会使用IronPython学习一种微妙的不同语言,以及我将不使用哪些库?
或者,IronPython的任何专业人士(不包括.NET IL编译类)是否会使其更具吸引力?
当我调用Powershell脚本时,如何保持被调用脚本关闭其命令窗口.我收到一个错误,如果我能读错误,我肯定可以修复它.
我有一个Powershell脚本,它使用.NET类发送带附件的电子邮件.如果我通过从命令行执行脚本或从Windows调度程序调用脚本直接调用脚本,那么它可以正常工作.如果我从另一个脚本(IronPython,如果这很重要)中调用它,那么它就会失败.所有方案在我的开发机器上都能正常工作 (我真的必须得到"在我的机器上工作"的标识!)我已经以一种显示命令窗口的方式调用Powershell,我可以在它关闭之前看到闪烁的红色.
对不起:Powershell 1.0,IronPython 1.1
解决方案:powershell -noexit d:\ script\foo.ps1
-noexit开关工作正常.我刚刚将它添加到我从IronPython传递的参数中.正如我所怀疑的那样,我可以自己解决这个问题(执行政策,虽然我暂时设置为不受限制但没有效果,所以我想我需要深入了解).如果我遇到麻烦,我会问另一个问题.
感谢大家的帮助.我了解到我需要更加密切地研究powershell交换机,并且我可以看到很多将来会证明有用的东西.
我正在编写一个嵌入了IronPython(2.0.1)的C#应用程序.我们的想法是将部分应用程序暴露给用户编写的IronPython脚本.
我想让用户能够使用Visual Studio Debugger调试由他们编写的脚本.请注意,脚本在托管环境中运行,而不是通过IronPython可执行文件(ipy.exe)运行.
在IronPython组件上有一些Reflector魔术后,我想出了一些让我这样做的东西,但我不确定这是否是规定的方式.基本上我所做的是创建一个"DebugRuntime"对象,将"DebugMode"属性设置为true,然后从"ScriptRuntime"创建一个基于python的"ScriptEngine",我用它来托管.代码如下.
ScriptRuntimeSetup setup = new ScriptRuntimeSetup();
setup.DebugMode = true;
setup.LanguageSetups.Add(Python.CreateLanguageSetup(null));
ScriptRuntime runtime = new ScriptRuntime(setup);
ScriptEngine engine = runtime.GetEngineByTypeName(typeof(PythonContext).AssemblyQualifiedName);
Run Code Online (Sandbox Code Playgroud)
现在,当我在托管环境中执行脚本时,使用:
ScriptSource script = engine.CreateScriptSourceFromFile(path);
CompiledCode code = script.Compile();
ScriptScope scope = engine.CreateScope();
script.Execute(scope);
Run Code Online (Sandbox Code Playgroud)
我可以在脚本文件中放置断点,并在脚本执行时被点击.
那么,有更好/更简单的方法吗?
谢谢
我很想喝一些现代动态语言koolaid,所以我相信Michael Foord的博客和播客上的所有内容,我已经买了他的书(并阅读了一些内容),并且我添加了一个嵌入式IPy运行时大概现有的应用程序大约一年前(虽然这是为其他人,我自己并没有真正使用它).
现在我需要做一些相当简单的代码生成工作,我将在一些.net对象(自定义,C#-authored对象)上调用几个方法,创建一些字符串,编写一些文件等.
尝试这种经历让我觉得这个小男孩觉得他是唯一能看到皇帝没穿衣服的人.如果你正在使用IronPython,我真的很感激你知道如何处理它的以下几个方面:
我真的很想相信这些东西,所以我仍然在假设我错过了一些东西.我真的想知道其他人是如何处理IPy的,特别是如果他们这样做的方式并不像我们只是失去了15年的工具开发价值.
更新:(2010年7月)这个问题看起来很陈旧,现在有两个官方的IronPython工具用于VS和PyCharm,这两个工具都显示了许多承诺,当我写这个时它们都没有.感谢所有回答的人.对于那些没有使用自动重构工具而感到高兴的人,我是否可以建议您永远不要使用具有良好自动重构功能的IDE.在你拥有之后,你会想知道为什么你认为你对find-replace感到高兴,而你再也不想没有它了.如果不出意外,立即重命名标识符而不必担心替换错误的文本位的能力会改变您命名内容的整个方法.
我在IronPython中定义了一个无副作用(纯)lambda表达式,并将其分配给C#委托.当从多个线程同时调用委托时,我得到类型为AccessViolationException,NullReferenceException和FatalEngineExecutionError的异常.
错误的发生是非确定性的,并且它主要需要数百万次迭代来激发它,这对我说"竞争条件".我怎么能避免呢?
只有在使用x64(x86不崩溃)并且在调试器之外运行进程时才会引发异常.测试系统是Windows 7,.NET Framework 4.0和IronPython 2.7.1上的Core I7(8个线程).
这是产生错误的最小代码:
var engine = Python.CreateEngine();
double a = 1.0;
double b = 2.0;
while (true)
{
Func<double, double, double> calculate = engine.Execute("lambda a,b : a+b");
System.Threading.Tasks.Parallel.For(0, 1000, _ =>
{
for (int i = 0; i < 1000; i++) { calculate(a,b); }
});
Console.Write(".");
}
Run Code Online (Sandbox Code Playgroud)
错误信息:
检测到FatalExecutionEngineError
消息:运行时遇到致命错误.错误的地址是0xf807829e,位于线程0x3da0上.错误代码是0xc0000005.此错误可能是CLR中的错误,也可能是用户代码的不安全或不可验证部分中的错误.此错误的常见来源包括COM-interop或PInvoke的用户编组错误,这可能会破坏堆栈.
更新:即使引擎声明为线程本地,它会在一段时间后崩溃:
var calculate = new ThreadLocal<Func<double, double, double>>(() => Python.CreateEngine().Execute("lambda a,b : a+b"));
Run Code Online (Sandbox Code Playgroud) 我在IronPython中有一个"脚本类",我的应用程序中的脚本通过调用其实例上的方法来工作.我需要从多个线程实现调用脚本.这样做的正确方法是什么?
我有多个问题:
是ScriptScope线程安全的?信息是矛盾的.ScriptScope的文档说:"ScriptScope不是线程安全的.当多个线程可以访问同一个模块或者应该为每个线程复制时,主机应该锁定." 然而,IronRuby的使用相同的DLR和@JimmySchementi说是"ScriptRuntime,ScriptEngine的,和ScriptScope都是线程安全的,设计线程之间使用.具体来说,ScriptScope使用一个线程安全的数据存储,所以ScriptScope可以在线程之间共享".
如果我创建多个ScriptScopes,那将意味着多次执行相同的初始化脚本.假设我运行了10个Python脚本文件,导入了5个程序集,并且总体上执行了相当多的代码以使"脚本对象"准备就绪.有没有办法避免为每个线程运行大量相同代码的时间和内存成本?
是ScriptScope变量线程静态(即应用ThreadStaticAttribute)和执行初始化为每个线程使用Task.Run的方式去?或者我应该使用TaskScheduler带有并发限制,因为多个范围的成本很高?
总的来说:如何正确实现在多个线程中的不同参数上运行相同的脚本?脚本必须同时执行,并且不得因竞争条件而崩溃.