从C#脚本引擎调用IronPython脚本时,调用Python脚本出错
我在用C#调用一个Iron Python脚本,代码是这样的:
ScriptRuntimeSetup setup = Python.CreateRuntimeSetup(null);
ScriptRuntime runtime = new ScriptRuntime(setup);
ScriptEngine engine = Python.GetEngine(runtime);
ScriptSource source = engine.CreateScriptSourceFromFile("C:/KitGenerator/KitGenerator/LoadKitsFromDatabase.py");
ScriptScope scope = engine.CreateScope();
source.Execute(scope);
这个方法运行得很好,我通过打印输出确认了代码是正常工作的。
不过在这个Iron Python脚本里,有一个调用另一个Python脚本的部分:
os.system("ipython C:\KitGenerator\Kit-Generator\GenerateKitImages.py")
(我试过直接用(ipython "GenerateKitImages.py")来运行)
问题是:当我用Ipy.exe运行第一个Iron Python脚本时,两个脚本都能正常运行,效果也如预期。
但是,当我用C#脚本引擎运行第一个Iron Python脚本时,它只运行了第一个脚本,第二个脚本却没有被调用。
我对此感到很困惑。我可以确认这和权限、依赖关系没有关系。
谁能解决这个问题,我愿意给他颁发金牌和披萨!
1 个回答
2
首先,os.system
这个调用应该使用原始字符串(r""):
os.system(r"ipython C:\KitGenerator\Kit-Generator\GenerateKitImages.py")
否则,反斜杠会引发一些问题。
不过,既然你说在 ipy.exe 中可以正常工作,我猜测在第一种情况下,ipython
在你的 PATH 中,而在第二种情况下则没有。你可以通过 C# 设置 PATH 环境变量,在 os.system
调用中包含 ipython
的完整路径,或者确保在调用 C# 程序之前设置好 PATH,通过 全局更改它。