Python.Net - 如何从文件 (.Py) 运行 python 编写脚本

Python.Net - How to run python script from file(.Py)

如何使用 python.Net 库 运行 .py 文件和调用函数。 我试过下面的代码,但它不是 运行ning.

    using (Py.GIL()){
      var fromFile = PythonEngine.Compile(null, @"C:\PycharmProjects\pythonenet\main.py", RunFlagType.File);
      fromFile.InvokeMethod("replace");//
    }

main.py 文件:

import re
def replace():
 print(re.sub(r"\s","*","Python is a programming langauge"))

当我尝试从字符串 运行 时它正在工作。

       using (Py.GIL()){
          string co = @"def someMethod():
                print('This is from static script')";
          var fromString = PythonEngine.ModuleFromString("someName", co);
          fromString.InvokeMethod("someMethod");   
        }

Python.NET (pythonnet) 的目的是为 .NET 开发人员启用快速脚本编写。 Python.NET 用于编写 .NET 组件脚本(如 C#、VB.NET、F3)。如果您的目标是制作一个 Python 程序 运行 另一个 Python 程序,您可以使用 Python:

提供的功能
# service.py
import main

def something():
    print('service: something()')

if __name__ == '__main__':
   something()
   main.something()
# main.py
import subprocess

def something():
    print('main: something()')

if __name__ == '__main__':
    something()
    subprocess.call("service.py", shell=True)

下面第一组的输出是由运行宁main.py程序产生的,第二组的输出是由运行宁service.py产生的] 程序。

# Running the "main.py" file produces the following output:
main: something()
service: something()
main: something()

# Running the "service.py" file produces the following output:
service: something()
main: something()

注意上面使用了两种不同的解决方案:

  1. 添加了 import main 命令行以将 main.py 文件包含在 service.py 文件中。
  2. subprocess 模块用于 运行 来自 main.py 文件的 service.py 文件。

最后我得到了以下解决方案。

using (Py.GIL()){
    dynamic os = Py.Import("os");
    dynamic sys = Py.Import("sys");
    sys.path.append(os.path.dirname(os.path.expanduser(filePath)));
    var fromFile = Py.Import(Path.GetFileNameWithoutExtension(filePath));
    fromFile.InvokeMethod("replace");
}