是否有除了 Python for .NET 或 IronPython 之外的其他方法来访问 .NET CLR?这两者似乎都有缺点,因为 .NET 的 Python 尚未得到积极开发(据我所知),并且如果您使用 IronPython,您会失去 CPython 中可用的一些功能。那么还有其他选择吗?
我刚刚开始尝试了解有关 .Net VM 基础的更多信息,但立即就被某些事情迷惑了。我知道有一个叫做 DLR 的新东西,它允许 C# 中的所有动态内容和 IronX 语言的运行。但现在我正在阅读有关这种名为 Boo 的语言,显然早在 DLR 存在之前它就已经具有动态功能。所以,
1)这怎么可能?
2) DLR 在方程式中添加了什么?
3) 像 Boo 这样的语言通过在 DLR 中重新实现自身会获得什么好处吗?
从我在这里和那里收集到的信息来看,DLR 似乎来自 IronPython,当时他们提取了 .Net 中 DL 支持所需的所有内容,并将其置于可重用的形式。所以我猜测 DLR 没什么特别的,只是一些帮助 Microsoft.Scripting.dll 中的动态对象的库,但如果你有时间的话,你可以自己编写代码,这我猜 Boo 身上发生了什么事?然后对于 2 和 3,我想 DLR 的通用性和可重用性将允许任何未来的 DLR 改进自动继承,但如果您已经做出了您的计划,则没有迫切的“需要”重新实施使用 DLR自己的自定义运行时?或者 DLR 是否有一些秘密的 MS 技术,使其比我们在 .Net 上所做的任何事情都更好?
4) DLR 真的是一个运行时还是只是一组库?(到底什么是运行时?我可能需要学习更多编译器理论,然后才能理解这个问题的答案,或者它是否是一个有意义的问题。忽略这个问题。或者不要。)
5) IronPython 编译是如何工作的?它会编译为新的动态版本的 CIL,还是只是在包含程序文本的字符串前面添加“ironpython.exe”命令?嗯,如果dynamic是C#中的关键字,那么一定有一个动态版本的CIL,对吧?那么.Net如何知道在CIL上使用CLR还是DLR呢?
6) JVM 的 DaVinci 项目有什么不同吗?看起来它是 JVM 本身的实际重新实现。这种方法有什么影响?我猜性能会有巨大的提升,但还有其他什么吗?MS有什么理由不走这条路?
7) DLR 是否会让 Boo 在制作 DSL 方面变得有些过时了?
我编写了一个 IronPython 包来进行一些数据处理,现在我将它包装在一个 C# 应用程序中。应用程序的部分功能是保存项目的状态,然后再恢复保存的状态。
我正在使用pickleIronPython 中的模块从我的自定义包中保存一个类的对象。在我用 C# 进行包装之前,这没有问题:我使用该pickle.dump()函数将对象序列化为文件。现在我想使用的pickle.dumps()功能序列化对象的字符串,然后将字符串传递给一个C#对象和序列化THAT对象有XmlSerializer。
序列化似乎有效,但反序列化失败了:C# 获取反序列化的字符串并将其传递给 IronPython,后者应该能够使用该pickle.loads()函数重构原始对象,但会引发此错误:
System.Collections.Generic.KeyNotFoundException {"ô"}
Run Code Online (Sandbox Code Playgroud)
你能帮我解决这个问题吗?我有两个理论:
也许 IronPython 和 C# 之间或 C#、IronPython 之间的字符串编码存在差异,以及pickle模块所期望的内容?
首先不是整个字符串都被序列化,所以我只是把废话传递给 pickle.loads()
我的证据使我得出这些理论:
错误消息 (ô) 中缺少的键看起来像一些 unicode-parsed-as-ASCII-text。
如果我中断执行(在 Visual Studio 2010 的调试模式下)并在将字符串传递给 IronPython 进行解开之前查看该字符串,我所看到的长度不足以表示整个对象。但它可能刚刚达到 Visual Studio 调试器将显示的限制。
提前致谢!
我有一个小的 python 脚本,它遍历一个网页(http-crawling)。此网页托管在 Intranet 内,并使用 NTLM 身份验证来收集对其的访问权限。
所以,我发现这个任务(检索 http 内容)可以使用 python 轻松编程,而不是尝试将整个 python 脚本重新编写为 C#,然后通过 SSIS 上的“脚本任务”使用它,以完成任务。
我仔细查看了 SSIS 工具,发现有一个名为“执行进程任务”的控制流,它允许您执行 Win32 可执行文件。
但问题在于如何调用我的 python 脚本,因为它不是可执行的,需要由 python 解释器解释(如果你能原谅重复的话)。因此,我可以轻松地构建一个简单的“.bat”文件,该文件同时调用 python 脚本和解释器。然后通过SSIS“执行进程任务”执行该文件。
有没有其他方法可以实现这一点?(整洁的方式)
从脚本中检索到的信息将把该信息从数据库存储到一个表中,以便从另一个 SSIS 进程通过数据库表访问该信息。
我正在从不同来源(平面文件、数据库表、http 请求等)检索信息,以便将该信息存档到可以发布在 Web 服务中然后从 Excel 项目访问的数据库中。
提前致谢!
我正在编写一个 C# GUI 应用程序,我想在其中使用 numpy,我在 Python 2.7 下广泛使用了它,并且它非常快速且易于编程。(我仍然发现 C# 中的 GUI 工作比 PyQt 更容易使用。)
现在有一个 numpy 和 scipy 的 IronPython 端口,我想学习如何使用它。
在开始之前,我想知道我将拥有哪些类型的部署选项?我可以完全包装 python 和 numpy 还是必须在我客户的机器上安装 python、Ironpython、numpy?
我有一个 WinForms 应用程序。应用程序的要求之一是运行 Python 脚本。为此,我正在使用IronPython. 我可以要求用户保存 Python 脚本文件,然后从其位置执行脚本。
但是,如果我可以为 Python 脚本提供具有语法突出显示和自动完成功能的应用程序内编辑器,那么对用户来说会更好也更容易。
Notepad++ 对于编写 Python 代码非常有用。但它不能通过我的 C# 代码进行配置。
AvalonEdit用于 WPF,我的应用程序是 WinForms。我注意到 IronLab 没有自动完成功能。
提供此类功能的最佳选择是什么?
我有两个python文件:mainfile.py和subfile.py
mainfile.py依赖于subfile.py中的某些类型.
mainfile.py看起来像这样.
from subfile import *
my_variable = [1,2,3,4,5]
def do_something_with_subfile
#Do something with things in the subfile.
#Return something.
Run Code Online (Sandbox Code Playgroud)
我正在尝试在C#中加载mainfile.py并获取my_varaible的值,但是我在查找充分描述我正在调用的方法之间关系的资源时遇到了一些困难,我承认,我不知道关于Python.
这是我写的:
var engine = Python.CreateEngine();
//Set up the folder with my code and the folder with struct.py.
var searchPaths = engine.GetSearchPaths();
searchPaths.Add(@"C:\ACodeFolder");
searchPaths.Add(@"C:\tools\python\lib");
engine.SetSearchPaths(searchPaths);
//A couple of files.
var mainfile = @"C:\ACodeFolder\mainfile.py";
var subfile = @"C:\ACodeFolder\subfile.py";
var scope = engine.CreateScope();
var scriptSource = engine.CreateScriptSourceFromFile(subfile);
var compiledScript = scriptSource.Compile();
compiledScript.Execute(scope);
scriptSource = engine.CreateScriptSourceFromFile(mainfile);
compiledScript = scriptSource.Compile();
compiledScript.Execute(scope);
scriptSource = …Run Code Online (Sandbox Code Playgroud) 我正在使用IronPython脚本重置所有过滤器并设置一些文档属性."FUTUREONLY"下面的文档属性是一个下拉属性控件,基于表达式有3种可能的选择.当我运行脚本时,它将文档属性重置为" - ",并使受其影响的所有可视化都为空.如果它是一个列表,我已经尝试了... = ["FUTUREONLY"] [1]以及...... ["FUTUREONLY"] ="第二个文字项目在下降线上"以及...... [ "FUTUREONLY"] =用于创建下拉项的表达式.
知道如何在下拉列表中专门设置一个下拉项目吗?下面是一个代码片段(它可以工作但是将属性下拉菜单设置为' - '而不是'DROP DOWN STRING'中的'SECOND TEXT ITEM':
dp = Document.Properties
dp["FUTUREONLY"] = ""
Run Code Online (Sandbox Code Playgroud)
谢谢,
克里斯
我有一堆C# DLL,我试图使用pythonnet库用 python 包装它们。
我注意到 DLL 正在使用Application.StartupPath,在 python 的情况下是 python.exe 所在的位置(据我所知)。这对我来说是个问题,因为这意味着我需要将所有 DLL 复制到安装 python 的文件夹中(o/w DLL 引发异常)。如果我理解正确,则无法使用pythonnet库修改Application.StartupPath。此外,我没有任何访问 DLL 源代码的权限,但我知道他们正在使用Application.StartupPath(因为我使用了dotPeak)。从头开始构建 DLL 也是不可能的,因为构建非常复杂并且需要很多依赖项。
如果有人能帮助我了解如何避免将 DLL 文件夹内容复制到我的 python 解释器的路径,我会很高兴。
多年来,我们一直将 IronPython 用作一些 .Net 桌面应用程序中的脚本工具。客户一直在询问我们何时会支持 Python 3,但看起来 IronPython3 仍有很长的路要走(https://github.com/IronLanguages/ironpython3)。我刚刚找到了一个名为 Python.Net 的库,并想知道它与 IronPython 有多相似,我们是否可以转移到它?
大多数 Python.Net 示例展示了如何在 Python 代码中使用 .Net 类型,我找不到任何关于如何在 C# 中实际运行 Python 代码的好示例。页面末尾有一个标题为“嵌入 Python”的部分 ( http://pythonnet.github.io/ ),但没有详细介绍。
我很想知道如何从文件或字符串运行脚本,脚本是否可以“编译”(如 IronPython),大概“变量”可以像 IronPython 作用域一样来回传递?是否有任何限制或已知问题?Python.Net 是否允许运行引用库(例如 numpy)的脚本?(我们无法在 IronPython 上使用它,我认为这是因为它包含编译的 (.pyc) 代码,而 IP 不支持该代码)。
有没有人对两者都有经验,并且能够提供一些关于它们如何比较的见解?