`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数据

原文地址:https://www.cnblogs.com/Annbless/p/9714343.html

时间: 2024-10-10 11:32:50

`python`被`C# `调用的方法的相关文章

Python调用java方法

需求 最近在后台项目代码中一段自定义的AES加解密的程序在平时的测试工作中应用频繁.因为写脚本经常会需要使用,而经过各种尝试,比如jpype等,都不尽如人意.最后转换思路找到了一种好方法: 1. 将java项目打成jar包: 2. 设定jar包的Main-class属性: 3. 在python中通过subprocess执行jar包. 修改main函数打jar包 在intellij中打jar包: 1. File--> Project Structure... --> Artifacts --&g

python 装饰器调用其他类中的方法

场景: 做自动化是,每次都需要调用登录方法,代码重复比较多,在这种场景下,将登录功能抽取为装饰器demo class Test: data= get_yaml_date_by_fillter(filename ='warehouse_case.yaml',filter='whpage') @ddt.data(*data) @login def test_OpenWareHouse_Info(self,data): try: for key in data: result = WarehouseI

python多重继承的属性和方法调用顺序问题和对迭代器的初步理解

推荐阅读:https://www.cnblogs.com/bigb/p/11650707.html 计算机学习的一个好办法就是自己将代码跑一遍,了解代码的运作顺序和原理(主要弄懂 函数作用,传入参数,返回值) 见代码: class A(object): def __init__(self): print('A') super(A, self).__init__() class B(object): def __init__(self): print('B') super(B, self).__i

python 的__del__删除器方法

遇到了python关于del的小问题,又引发了一些问题,就简单的记录下,如果有不同意见,欢迎一起讨论~ python类似java是有垃圾回收机制的语言,所以我们不需要像c++一样通过析构函数来手动释放内存, 但是python也同样提供了__del__释放方法.当一个对象的引用计数为0时,会被自动调用,那么先来说说 引用计数吧. 1.引用计数 #!/usr/bin/env python #coding:UTF-8 import sys class MyClass(object): def __in

Python文件遍历二种方法

分享下有关Python文件遍历的两种方法,使用的OS模块的os.walk和os.listdir实现. 关于Python的文件遍历,大概有两种方法,一种是较为便利的os.walk(),还有一种是利用os.listdir()递归遍历.方法一:利用os.walkos.walk可以自顶向下或者自底向上遍历整个文件树,然后返回一个含有3个元素的tuple,(dirpath, dirnames, filenames).注意,os.walk()会返回一个generater,所以调用的时候一定要放到for循环中

linux 下的动态库制作 以及在python 中如何调用 c 函数库

动态库: 动态库又称动态链接库英文为DLL,是Dynamic Link Library 的缩写形式,DLL是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件.动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数.函数的可执行代码位于一个 DLL 中,该 DLL 包含一个或多个已被编译.链接并与使用它们的进程分开存储的函数.DLL 还有助于共享数据和资源.多个应用程序可同时访问内存中单个DLL 副本的内容.DLL 是一个包含可由多个程序同时使用的代码和数据的库.Wind

python之selenium调用js(execute_script)

转载: http://www.cnblogs.com/fnng/p/3230768.html 本节重点: 调用js方法 execute_script(script, *args) 在当前窗口/框架 同步执行javaScript 脚本:JavaScript的执行. *参数:适用任何JavaScript脚本. 使用: driver.execute_script('document.title') 使快播登陆用户名输入框标红显示: #coding=utf-8 from selenium import

[Python] 正确复制列表的方法

new = old[:] Python老鸟都知道以上代码是什么意思.它复制列表old到new.它对于新手来说是种困惑而且应该避免使用这种方法.不幸的是[:]标记法被广泛使用,可能是Python程序员不知道更好的列表复制法吧. 首先我们需要了解Python是如何管理对象和变量.Python没有C语言中的变量.在C语言中,变量不止是个名字,它是字节集合并真实存在于内存某个位置上.而在Python中,变量仅仅是指向对象的标签. 看看以下语句: a = [1, 2, 3] 它表示我们创建了一个指引指向列

python发布及调用基于SOAP的webservice

现如今面向服务(SOA)的架构设计已经成为主流,把公用的服务打包成一个个webservice供各方调用是一种非常常用的做法,而应用最广泛的则是基于SOAP协议和wsdl的webservice.本文讲解python环境下如何发布及调用一个基于SOAP的webservice,基于soaplib(发布)和suds(调用). OS:ubuntu 14.04  python:2.7.6 服务端: 1.安装: 服务端要使用的工具包是soaplib,遗憾的是现在也停止维护了,不过好在还能用,下载地址在http