C#调用Python

环境:Windows 8.1,已经安装Python2.7(C:\Python27),配置了环境变量. 已经安装VS2013,VS2017

1.安装IronPython

下载地址http://ironpython.net/download/ 我下载的是IronPython-2.7.4.3261515540.msi

安装目录为:F:\Program Files (x86)\IronPython 2.7

2.新建C#项目

打开vs2013,新建控制台程序CSharpCallPython

3.添加引用

在CSharpCallPython中添加引用,F:\Program Files (x86)\IronPython 2.7\Platforms\Net40下的IronPython.dll和Microsoft.Scripting.dll

4.在CSharpCallPython添加py脚本文件Python1.py,,并选择复制到本地,代码如下

def add(num1,num2):
return num1+num2;

5.在CSharpCallPython添加代码

        ScriptRuntime pyRuntime = Python.CreateRuntime(); //创建一下运行环境

        dynamic obj = pyRuntime.UseFile("Python1.py"); //调用一个Python文件

        int a = , b = ;

        int sum = obj.add(a,b); //调用Python文件中的求和函数
Console.Write("Sum:");
Console.WriteLine(sum);

运行结果Sum=3

调用到此结束,谢谢大家. 如果这样也许,那么这是不可能的.请看下文

6.如何引用第三方库

如何使用os下面的库呢,咱们继续 继续添加py脚本文件python2.py

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import os
import shutil def ClearDirect(path):# for root, dirs, files in os.walk(path,topdown=False):
print 'root',root
for dir in dirs: print 'delete:',os.path.join(root, dir)
#os.removedirs(os.path.join(root, dir))
shutil.rmtree(os.path.join(root, dir)) return 'OK'

脚本用处是删除传入的目录的子目录 添加C#代码

     ScriptRuntime pyRuntime2 = Python.CreateRuntime(); //创建一下运行环境
dynamic obj2 = pyRuntime.UseFile("Python2.py"); //调用一个Python文件
obj2.ClearDirect(@"D:\Data\KkImage\2017"); //
Console.Write("result ");
Console.WriteLine(sum);

运行后,十分抱歉,报错了

“IronPython.Runtime.Exceptions.ImportException”类型的未经处理的异常在 Microsoft.Dynamic.dll 中发生 

其他信息: No module named os  

找不到OS这个模块

7.怎么才能使用OS这个库呢

在python2.py中加入

import sys
sys.path.append("F:\Program Files (x86)\IronPython 2.7\lib")

代码变成

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import sys
sys.path.append("F:\Program Files (x86)\IronPython 2.7\lib")
import os
import shutil def ClearDirect(path):#直接删除 for root, dirs, files in os.walk(path,topdown=False):
print 'root',root
for dir in dirs: print 'delete:',os.path.join(root, dir)
#os.removedirs(os.path.join(root, dir))
shutil.rmtree(os.path.join(root, dir)) return 'OK'

再次运行,发现子目录删除成功 . 祝贺你.

8.代码继续优化

在上面的python代码中,加了

  sys.path.append("F:\Program Files (x86)\IronPython 2.7\lib")

这在程序发布了的时候,服务器上的路径是会变化的,如果有几十个python文件,难道还要挨个修改这个路径么?想想都恐怖.

所以,可以用下面的方法啦.(先把python文件中的sys.path.append("F:\Program Files (x86)\IronPython 2.7\lib"这句去掉)

ScriptRuntime pyRuntime3 = Python.CreateRuntime(); //创建一下运行环境
var engine = pyRuntime3.GetEngine("python");
var pyScope = engine.CreateScope();
var paths = engine.GetSearchPaths();
paths.Add(@"F:\Program Files (x86)\IronPython 2.7\lib");
engine.SetSearchPaths(paths);
dynamic obj3 = pyRuntime3.UseFile("Python2.py"); //调用一个Python文件
obj3.ClearDirect(@"D:\Data\KkImage\2017"); //

在engine中指定库的位置,就不用每个python文件中指定了

8.代码继续优化

源码地址:https://download.csdn.net/download/hanghangz/10397609

C#调用Python,报错No module named os的更多相关文章

  1. python报错No module named 'pylab'

    pip instal matplotlib

  2. mac 上python编译报错No module named MySQLdb

    mac 上python编译报错No module named MySQLdb You installed python You did brew install mysql You did expor ...

  3. python踩坑系列之导入包时下划红线及报错“No module named”问题

    python踩坑系列之导入包时下划红线及报错“No module named”问题 使用pycharm编写Python时,自己写了一个包(commontool),在同级另一个路径下(fileshand ...

  4. python manage.py startapp app 时候报错No module named _sqlite3

    python manage.py startapp app 报错如下: File "manage.py", line 10, in <module>    execut ...

  5. 在eclipse中用java调用python报错 Exception in thread "main" ImportError: Cannot import site module and its dependencies

    最近做项目需要用java调用python,配置了jython后,运行了例子代码: 获得一个元组里面的元素: import org.python.util.PythonInterpreter; publ ...

  6. Python 导入requests报错No module named requests

    刚开始是在Pycharm里面,发现就是不对,导入老提示No module named requests这个错误.后面发现是指向的python.exe路径不对,到setting里面设置换一下路径就好.

  7. python django2.x报错No module named 'django.core.urlresolvers'

    解决方法就是: from django.urls import reverse 最近从django1.9迁移到django2.0中出现一个意外的报错: 这个报错的原因在stack overflow上有 ...

  8. Django:django-cors-headers 报错no module named "corsheaders"

    django跨域使用 pip install django-cors-headers 然后在settings文件中加上参数设置 # app配置 INSTALLED_APPS = [ 'django.c ...

  9. salt-minion启动报错No module named salt.scripts

    这是当初部署saltstack时候的问题了,saltstack用的是0.17.4的版本.正当minion部署到最后时候,启动 minion端时报错ImportError: No module name ...

随机推荐

  1. dataTable插件的使用

    var table; table = $("#example").dataTable({ "sDom": "<'top'f<'clear' ...

  2. 给定n,求1/x + 1/y = 1/n (x<=y)的解数~hdu-1299~(分解素因子详解)

    链接:https://www.nowcoder.com/acm/contest/90/F来源:牛客网 题目描述 给定n,求1/x + 1/y = 1/n (x<=y)的解数.(x.y.n均为正整 ...

  3. ansible自动化运维

    ansible 系统架构 ansible简介 ansible是新出现的自动化运维工具,ansible是一个配置管理和应用部署工具,基于Python开发,集合了众多运维工具(puppet.cfengin ...

  4. java性能调优---------------------JVM调优方案

    JVM的调优的主要过程有: 1.确定堆内存大小(-Xmx.-Xms) 2.合理分配新生代和老年代(-XX:NewRatio.-Xmn.-XX:SurvivorRatio) 3.确定永久区大小(-XX: ...

  5. python全栈学习--day3

    一.基础数据类型 基础数据类型,有7种类型,存在即合理. 1.int 整数 主要是做运算的 .比如加减乘除,幂,取余  + - * / ** %...2.bool 布尔值 判断真假以及作为条件变量3. ...

  6. 第2次作业:stream案例分析

    摘要:本次随笔是对stream软件进行一次案例分析,以个人观点分析stream为什么成功. 一.介绍产品相关信息 1.我选择的商品是stream 2.选择该产品的主要原因准要是因为自己本身喜欢玩这个平 ...

  7. C语言程序设计(基础)- 第7周作业

    为了防止误解,自从本周开始ppt.pta作业.博客作业的命名均与学校教学周一致. 要求一(20经验值) 完成PTA中题目集名为<usth-C语言基础-第七周作业>和<usth-C语言 ...

  8. beta冲刺5-咸鱼

    昨天的问题: 登陆页面的整合重新制作 各主机版本更迭 我的社团显示功能修改调整 主页的头部替换掉 +修复帖子无法显示内容的问题 +试着将邮箱等判定用正则表达式进行实时判定. 今天的完成: 主要是线下进 ...

  9. Alpha冲刺No.7

    一.站立式会议 彻底完成初步的界面设计 实现界面的简单跳转 完成部分事件监听 移植摄像头.图库功能到真实手机环境测试 数据库上传获取日记 二.项目实际进展 完成了简单的界面设计 大致完成了跳转任务 数 ...

  10. Alpha冲刺第一天

    Alpha冲刺第一天 站立式会议 项目进展 项目的第一天,主要工作是对项目的开发进行规划,以及将规划的成果转化为燃尽图与博客文章.依据项目需求分析报告与开题报告中已经完成的设计任务和项目规划,我们将系 ...