在使用IronPython和C#时,是否可以在运行python脚本之前检查其语法?
既然我解决了检查语法的问题,我将详细说明我是如何做到这一点的。我将以我自己的实现为例 首先,我用了什么?我是怎么用的 从2.6版开始,我就使用了IronPython中可用的在使用IronPython和C#时,是否可以在运行python脚本之前检查其语法?,c#,python,ironpython,C#,Python,Ironpython,既然我解决了检查语法的问题,我将详细说明我是如何做到这一点的。我将以我自己的实现为例 首先,我用了什么?我是怎么用的 从2.6版开始,我就使用了IronPython中可用的ast模块(我使用了2.7.4(1))。ast模块构建了一个抽象语法树(2)(简称ast),其中包含补充到模块中的代码。这个函数使我能够知道脚本是否具有良好的语法。因此,我知道如果模块能够成功创建树,则表示语法正常,如果出现异常,则表示不正常 我是如何实现它的 实现并不是最容易的,但我要感谢他,因为他很快解决了我遇到的某些错误
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
注意以下几点很重要:
可能不同,因为 您正在运行的Windows版本以及安装方式 铁蟒。此url是Windows 7 64位上的默认安装位置C:\Program Files(x86)\ironpython2.7\Lib
必须位于import ast
和import sys
行路径后面。append
- 请确保此文件的语法正确,但这很可能不会发生,因为代码无论如何都不会运行。我使用了适用于VisualStudio2.0(3)的Python工具,这使得创建Python文件变得更加容易,并且不需要安装VisualStudio以外的其他软件来创建Python文件
(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.pathimport 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