C#调用Python

2018-12-03  本文已影响12人  过桥

实现效果

通过C#调用Python写好的方法

方法一、通过安装 IronPython 实现

Q:找不到py文件
A:检查最后执行文件路径,可能需要将文件属性中“复制到输出目录”设置为“始终复制”

Qpy文件方法执行异常
A:检查py文件可否单独执行,如果可以执行,检查执行环境是否为3.x,可能需要py代码降级;如果不可执行,检查是否引用第三方包,第三方是否非全局安装

Tip:目前 IronPython 支持Python模拟运行环境为2.x

方法二、将py文件通过flask发布成接口

Q:跨域
A:设置跨域访问装饰器

Q:使用sublime,启动python服务,修改代码后再次启动python服务,调用还是初始未修改的服务
A:简单粗暴方式,直接切换端口;进阶方式,检查任务管理器中python对应进程,关闭正在运行的进程后再启动

方法二、样例代码

# -*- coding:utf-8 -*-
from functools import wraps
from flask import Flask, url_for, request, make_response
import sketch_n_draw


app = Flask(__name__)

#跨域
def allow_cross_domain(fun):
    @wraps(fun)
    def wrapper_fun(*args, **kwargs):
        rst = make_response(fun(*args, **kwargs))
        rst.headers['Access-Control-Allow-Origin'] = '*'
        rst.headers['Access-Control-Allow-Methods'] = 'PUT,GET,POST,DELETE'
        allow_headers = "Referer,Accept,Origin,User-Agent"
        rst.headers['Access-Control-Allow-Headers'] = allow_headers
        return rst
    return wrapper_fun

@app.route('/')
@allow_cross_domain
def api_root():
    return 'Welcome sketch_n_draw Root!'

@app.route('/api',methods = ['POST'])
@allow_cross_domain
def api():
    if request.method == "POST":
        folderName = request.form.get('folderName')
        fileName = request.form.get('fileName')
        return sketch_n_draw.start(folderName,fileName)


if __name__ == '__main__':
    app.run(host='172.16.9.26',port=8080)
上一篇下一篇

猜你喜欢

热点阅读