从C#脚本引擎调用IronPython脚本时,调用Python脚本出错

2 投票
1 回答
2052 浏览
提问于 2025-04-18 05:49

我在用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,通过 全局更改它

撰写回答