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. Lucene-02:搜索初步

    承接上一篇文章. package com.amazing; import java.io.File; import java.io.IOException; import org.apache.luc ...

  2. PHP 环境搭建篇

    0x01 PHP 简介 PHP 是一种流行的通用脚本语言, 特别适合 web 开发. 快速, 灵活, 务实, PHP 的所有东西, 从你的博客到世界上最流行的网站. 0x02 PHP环境要求 Tips ...

  3. [css 揭秘]:CSS揭秘 技巧(四):边框内圆角

    我的github地址:https://github.com/FannieGirl/ifannie/ 源码都在这上面哦! 喜欢的给我一个星吧 边框内圆角 问题:有时候我们需要一个容器,只在内侧有圆角,而 ...

  4. matlab: 数据的读写

    读取数据的方法 读取.txt数据 如果.txt是按照矩阵顺序保存的一个数组,可以用textread()函数来读取: GAP=textread('continua.txt'); 读取.fig图中的数据 ...

  5. Spring MVC的handlermapping之RequestMappingHandlerMapping初始化

    RequestMappingHandlerMapping:这个handlerMapping是基于注解的同样,先上类图: 通过类图可以看到,同样是继承父类 AbstractHandlerMapping来 ...

  6. 如何在mac上搭建sqli-labs

    近期想学习sql注入,但是一来网络上的资料参差不齐,难以系统的学习:二来随着程序员安全意识的提高,这种完全可以避免的注入漏洞越来越少见了,所以难以找一个合适的网站练手,于是乎,sqli-labs这种实 ...

  7. Beta冲刺NO.5

    Beta冲刺 第五天 1. 昨天的困难 1.昨天的困难主要是在类的整理上,一些逻辑理不清,也有一些类写的太绝对了,扩展性就不那么好了,所以,昨天的困难就是在重构上. 页面结构太凌乱,之前没有统筹好具体 ...

  8. 团队作业2:需求分析&原型设计

    Deadline: 2017-11-5  22:00PM,以博客发表日期为准.   评分基准: 按时交 - 有分,检查的项目包括后文的三个方面 需求分析 原型设计 编码规范 晚交 - 0分 迟交两周以 ...

  9. codevs 1283 等差子序列

    http://codevs.cn/problem/1283/ 题目描述 Description 给一个 1 到 N 的排列{Ai},询问是否存在 1<=p1<p2<p3<p4& ...

  10. Scala 操作符与提取器

    实际上Scala没有操作符, 只是以操作符的格式使用方法. 操作符的优先级取决于第一个字符(除了赋值操作符), 而结合性取决于最后一个字符 Scala的操作符命名更加灵活:) 操作符 中置操作符(In ...