Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# IronPython引用和范围问题_C#_C# 4.0_Visual Studio 2012_Ironpython - Fatal编程技术网

C# IronPython引用和范围问题

C# IronPython引用和范围问题,c#,c#-4.0,visual-studio-2012,ironpython,C#,C# 4.0,Visual Studio 2012,Ironpython,我有一个IronPython应用程序,它处理排除规则的记录。基本上,我有一个目录结构: 解放党\ Lib\DBCL\General.py Lib\Exclusions\script.py 我的程序创建IronPython运行时的实例: Dictionary<String, Object> oDic = new Dictionary<String, Object>(); oDic.Add("Debug", true); iEngine = Python.

我有一个IronPython应用程序,它处理排除规则的记录。基本上,我有一个目录结构:

解放党\

Lib\DBCL\General.py

Lib\Exclusions\script.py

我的程序创建IronPython运行时的实例:

Dictionary<String, Object> oDic = new Dictionary<String, Object>();
oDic.Add("Debug", true);
iEngine = Python.CreateEngine(oDic);
iScope = iEngine.CreateScope(new Dictionary<String, Object> { { "sql", iSql } });
iScriptSource = aScript;
iSource = iEngine.CreateScriptSourceFromFile(iScriptSource);
因此,我执行script.py:

iSource.Execute(iScope); // Edited 1/10/2014 to show I am passing the scope in.
在我的script.py文件中,我调用General.py在SQL中执行查找(请记住,我通过iEngine.CreateScope()添加了一个名为“SQL”的变量)

然而,IronPython说这个全局变量不存在。但是如果我在script.py中调用,它将作为一个全局变量存在。如何使我的变量对我导入的所有脚本全局可用

如果有任何困惑或这个问题的形式不正确,请让我知道,我会尝试解决它。我觉得我缺少了一些简单的东西,但现在通过简单地通过参数传递“sql”就可以暂时解决这个问题。如果可能的话,我想避免这样做,但如果我做不到,那没关系。

请检查,第三个答案。简而言之,python中的全局变量是模块范围的,而不是解释器范围的

我怀疑在script.py中您需要

import DBCL
from DBCL import General
General.sql = sql

尝试传递在执行脚本时创建的范围:

iSource.Execute(iScope);

这将自动将作用域中的任何内容注入脚本的全局名称空间。

我希望我可以以某种方式自动执行此操作,而无需执行该行。问题是,很多人可能正在编写不同的脚本文件,如果可能的话,我希望避免强制他们执行某些代码。除此之外,还有一个很好的答案。我将在中运行一些内容,并很快接受这个答案。@AdamSears,您始终可以创建一个模块“myglobals”,在其中添加“sql”对象和其他对象,并使编写脚本的大量人员遵循“sql”是“myglobals”的约定,他们会写:
import myglobals
,然后以这种方式使用/引用“sql”对象:
myglobals.sql
这是我没有实际显示的错误,但我确实在Execute中传递了范围。我将调整我的问题以反映这一点,以避免混淆。
iSource.Execute(iScope);