`python`被`C# `调用的方法

目的:

  • 熟悉markdown
  • 记录python被C#调用的方法

参考材料:

  • markdown语法
  • python被C#调用的方法(参考自博客内容)

调用方法:

  1. 采用Ironpython:
    • 优点: 快捷方便,方便传递参数等,因为相当于是将python代码传递进C#之中进行操作,语法逻辑比较清楚。
    • 缺点: 需要额外配置Ironpython, 且不支持python3.X。不共享系统中安装的python环境包,需要额外配置路径或者重装numpy之类的软件包。
    • 示例代码:
    using IronPython.Hosting;
    using Microsoft.Scripting;
    using Microsoft.Scripting.Hosting; 
    
    C#中调用处:
    var engine = Python.CreateEngine();
    var scope = engine.CreateScope();
    var source = engine.CreateScriptSourceFromFile("path\\test.py")
    source.Execute(scope);
    var func = scope.GetVariable<Func<object, object>>("func"); //该函数有一个参数输入
    func('test') //最简单的调用
    
  2. 命令行process调用:
    • 优点:也挺方便的,但是要设置的比较多,不同操作系统需要注意下路径写法之类的。
    • 缺点:通过命令行的方式传递参数,感觉不是非常适合大量数据的传递或者对命令行不熟悉的话使用起来有些麻烦
    • 示例代码:
    using System.Diagnostics;
    
    Process p = new Process();
    //使用cmd命令是因为使用直接使用python实验过程中会闪退,暂时先使用cmd命令代替
    p.StartInfo.FileName = "cmd.exe";
    p.StartInfo.Arguments = "/k" + " " + "python" + " " + "path\\test.py";
    p.StartInfo.RedirectStandardError = true;
    p.StartInfo.RedirectStandardInput = true;
    p.StartInfo.RedirectStandardOutput = true;
    p.StartInfo.UseShellExecute = false;
    p.StartInfo.CreateNoWindow = false; //输入输出重定向可能需要手动关闭弹出的cmd窗口
    p.Start();
    string[] output = p.StandardOutput.ReadToEnd().Split('\r'); //获取输出的字符串
    p.WaitForExit();
    p.Close();
    
  3. 方法2的补充:
    • 关于如何传递大量数据,比如数组之类的:
      • 采用json储存,传递地址或者默认一个共用地址,从地址读取json数据
posted @ 2018-09-27 17:18  Annbless  阅读(245)  评论(0编辑  收藏  举报