C#调用Python
2018-12-03 本文已影响12人
过桥
实现效果
通过C#
调用Python
写好的方法
方法一、通过安装 IronPython
实现
Q
:找不到py
文件
A
:检查最后执行文件路径,可能需要将文件属性中“复制到输出目录”设置为“始终复制”
Q
:py
文件方法执行异常
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)