C#呼叫Python

weixin_34290000發表於2018-12-03

實現效果

通過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)