在使用IronPython和C#时,是否可以在运行python脚本之前检查其语法?

在使用IronPython和C#时,是否可以在运行python脚本之前检查其语法?,c#,python,ironpython,C#,Python,Ironpython,既然我解决了检查语法的问题,我将详细说明我是如何做到这一点的。我将以我自己的实现为例 首先,我用了什么?我是怎么用的 从2.6版开始,我就使用了IronPython中可用的ast模块(我使用了2.7.4(1))。ast模块构建了一个抽象语法树(2)(简称ast),其中包含补充到模块中的代码。这个函数使我能够知道脚本是否具有良好的语法。因此,我知道如果模块能够成功创建树,则表示语法正常,如果出现异常,则表示不正常 我是如何实现它的 实现并不是最容易的,但我要感谢他,因为他很快解决了我遇到的某些错误

既然我解决了检查语法的问题,我将详细说明我是如何做到这一点的。我将以我自己的实现为例

首先,我用了什么?我是怎么用的

从2.6版开始,我就使用了IronPython中可用的
ast
模块(我使用了2.7.4(1))。
ast
模块构建了一个抽象语法树(2)(简称ast),其中包含补充到模块中的代码。这个函数使我能够知道脚本是否具有良好的语法。因此,我知道如果模块能够成功创建树,则表示语法正常,如果出现异常,则表示不正常

我是如何实现它的

实现并不是最容易的,但我要感谢他,因为他很快解决了我遇到的某些错误

我将讨论代码的两部分。首先,我将讨论我在C#代码中调用的Python部分

Python:

import System
import sys
sys.path.append(r"C:\Program Files (x86)\IronPython 2.7\Lib") #This reference was vital, without it I wouldn't be able to check any code because Ironpython would just mention "no module named 'ast' "
import ast                                                    #The ast module is loaded to check the script for any errors.

def syntaxcheck(fileurl):                                     #The method that runs the parse, I call this method in my C# code and provide the URL directly from an openfiledialog event.
    result = ast.parse(open(fileurl, 'r').read())             
    return result
注意以下几点很重要:

  • C:\Program Files(x86)\ironpython2.7\Lib
    可能不同,因为 您正在运行的Windows版本以及安装方式 铁蟒。此url是Windows 7 64位上的默认安装位置
  • import ast
    必须位于
    import sys
    路径后面。append
  • 请确保此文件的语法正确,但这很可能不会发生,因为代码无论如何都不会运行。我使用了适用于VisualStudio2.0(3)的Python工具,这使得创建Python文件变得更加容易,并且不需要安装VisualStudio以外的其他软件来创建Python文件
现在是C代码(这是从打开openFileDialog开始的,因为我是这样使用它的,但这并不意味着你不能在其他函数或方法中使用它):

上面的代码有注释,解释了我做什么以及为什么做。如果有任何问题,请随时提问:-)

因为我的声誉太低,无法添加额外的超链接,所以这里有一个由括号()识别的链接列表,括号中有一个数字:

  (1): http://ironpython.codeplex.com/downloads/get/723206   ---> IronPython 2.7.4
  (2): http://en.wikipedia.org/wiki/Abstract_syntax_tree     ---> Info on AST
  (3): https://pytools.codeplex.com/releases/view/103102     ---> Python Tools for Visual Studio 2.0

我提出的解决方案显示在我最初提出问题的地方。由于我解决了自己的问题,并在这里发布了解决方案,我可以说这就是问题的答案。再次感谢Pawel Jasinski!:-)Baikuriu还感谢您给出检查AST模块的提示。

该模块是否在IronPython中可用?它似乎确实提供了一个模块……我认为它是可用的,如果可能有帮助的话,我正在使用IronPython2.7。这个助手:ast.parse(expr,filename='',mode='exec')做我想要的吗?当我快速查看时,关于这个助手的文档非常稀少。是的。如果这引发了一个
SyntaxError
,那么该参数不是一个格式良好的python程序。好的,谢谢,我将尝试一下,看看能走多远。sys.path
import sys中缺少stdlib;sys.path.append('c:/ProgramFiles(x86)/IronPython 2.7/Lib)
Name                                    Path

Microsoft.Scripting.dll                 C:\Program Files(x86)\IronPython 2.7\Microsoft.Scripting.dll               
IronPython.Modules.dll                  C:\Program Files(x86)\IronPython 2.7\IronPython.Modules.dll
IronPython.dll                          C:\Program Files(x86)\IronPython 2.7\IronPython.dll
  (1): http://ironpython.codeplex.com/downloads/get/723206   ---> IronPython 2.7.4
  (2): http://en.wikipedia.org/wiki/Abstract_syntax_tree     ---> Info on AST
  (3): https://pytools.codeplex.com/releases/view/103102     ---> Python Tools for Visual Studio 2.0