在平時工作中,需求有多種實現方式;根據不同的需求可以採用不同的程式語言來實現。發揮各種語言的強項
如:python的強項是:資料分析、人工智慧等
.net 開發桌面程式介面比python更簡單、方便、美觀
那麼就存在各種語言間互動,本篇主要介紹幾種c# 與 python的互動方式。
1、ironpython是什麼?
ironpython是python程式語言的開源實現,該語言與.net framework緊密整合。ironpython可以使用.net framework和python庫,而其他.net語言也可以輕鬆使用python**。
2、irconpython如何使用
a) 新增包引用:
install-package ironpython -程式設計客棧version 2.7.11
b) 執行簡單python指令碼:
//建立執行引擎
scriptengine engine = python.createengine();
scriptscope scope = engine.createscope();
string script = "'hello %d' %number";
//設定引數列表
scope.setvariable("number", 123);
scriptsource sourcecode = engine.createscriptsourcefromstring(script);
var result = sourcecode.execute(scope);
c) 執行python檔案方法:
新增如下簡單python檔案:demo.py
#檔案目錄 demo.py
import time
def welcome(name):
return "hello " + name
def add(a, b):
return a + b
def showmsg(name,birthday):
return "姓名:" + name + ",生日:" + birthday
執行方法:
string path = @"demo.py";
scriptruntime pyruntime = python.createruntime(); //建立一下執行環境
dynamic obj = pyruntime.usefile(path);
//呼叫python中add函式
object sum = obj.add(1, 54);
d) 執行python檔案方法(依賴三方庫):
from scipy import linalg
import numpy as np
import json
def calcnum(jsoninput):
a = np.array([[1, 1, 7], [2, 3, 5], [4, 2, 6]]) # a代表係數矩陣
b = np.array([2, 3, 4]) # b代表常數列
x = linalg.solve(a, b)
# json字串轉物件
info = json.loads(jsoninput)
print(info['a'])
# 物件轉json字串
output = json.dumps(info)
print(output)
程式設計客棧print(x)
執行結果:
ironpython雖然能夠互動python,但支援的庫不多,當py檔案依賴三方庫,則會呼叫失敗;且ironpython對python3尚未完全支援,下面就開始在c#在python有第三方庫的情況下互動python。
把python打包成exe,c#再通過cmd進行互動。就可以解決第三方庫的問題;
修改python檔案(calc.py):依賴了scipy庫
from scip程式設計客棧y import linalg
import numpy as np
import json
def calcnum(jsoninput):
a = np.array([[1, 1, 7], [2, 3, 5], [4, 2, 6]]) # a代表係數矩陣
b = np.array([2, 3, 4]) # b代表常數列
x = linalg.solve(a, b)
# json字串轉物件
info = json.loads(jsoninput)
print(info['a'])
# 物件轉json字串
output = json.dumps(info)
print(output)
print(x)
if __name__ == '__main__':
inputstring = sys.ar**[1]
calcnum(inputstring)
pyinstaller:
pyinstaller 是乙個程式,將(包)python 程式打包到獨立的可執行檔案中,在 windows、linux、mac os x、freebsd、solaris 和 aix 下。與類似工具不同,它的主要優點是 pyinstaller 可以與 python 2.7 和 3.3_3.5 配合使用,它通過透明壓縮構建更小的可執行檔案,它是完全多平台的,並使用作業系統支援來載入動態庫,從而確保完整相容性。
pyinstaller 的主要目標是與開箱即用的第三方軟體包相容。這意味著,使用 pyinstaller 時,所有使外部包正常工作所需的技巧都已整合到 pyinstaller 本身中,因此無需使用者干預。您永遠不需要在 wiki 中查詢技巧,並將自定義修改應用於檔案或設定指令碼。例如,像pyqt、django或matplotlib這樣的庫完全支援,而無需手動處理外掛程式或外部資料檔案。
安裝:
在cmd命令列中執行:需提前安裝pip(python3.4以後預設包含)
pip install pyinstaller
打包:
//命令格式
pyinstaller 選項 python 原始檔
選項引數支援以下內容:
引數描述
-h, -help
檢視幫助文件
-f,-onefile
產生單個的可執行檔案
-d,--onedir
產生乙個目錄(包含多個檔案)作為可執行程式
-a,--ascii
不包含 unicode 字符集支援
-d,--debug
產生 debug 版本的可執行檔案
-w,--windowed,--noconsolc
指定程式執行時不顯示命令列視窗(僅對 windows 有效)
-c,--nowindowed,--console
指定使用命令列視窗執行程式(僅對 windows 有效)
-o dir,--out=dir
指定 spec 檔案的生成目錄。如果沒有指定,則預設使用當前目錄來生成 spec 檔案
-p dir,--path=dir
設定 python 匯入模組的路徑(和設定 pythonpath 環境變數的作用相似)。也可使用路徑分隔符(windows 使用分號,linux 使用冒號)來分隔多個路徑
-n name,--name=name
指定專案(產生的 spec)名字。如果省略該選項,那麼第乙個指令碼的主檔名將作為 spec 的名字
最後在命令列中執行命令:
pyinstaller -f calc.py
打包完成後,生成calc.exe檔案:
呼叫:private string calc(string inputstring)
到此該方法已能成功呼叫python結果
使用python中flask庫實現乙個簡單的webapi服務:
from flask import flask, request
import math
app = flask(__name__)
@app.route("/")
def welcome():
return "hello world!"
@app.route("/calc")
def calc():
strinput = request.args.get("jsoninput")
return math.calcnum(strinput)
if __name__ == "__main__":
app.run()
最後在c#中呼叫webapi:得到python結果
通過以上內容知道各種語言平台想互動,雖然有多種方式實現;但是最為推薦還是提程式設計客棧供webapi介面方式。
C與Python互動ctype方式記錄
python中封裝了ctype可以用來c與python之間的互動。在vs中選擇動態庫編譯可以將函式編譯成動態庫的形式。下面條件編譯是用來在c 中編譯c的函式,並且匯出成動態庫的。ifdef cplusplus define xext extern c else define xext endif i...
Python與shell的互動方式
考慮這樣乙個問題,有hello.py指令碼,輸出 hello,world 有testinput.py指令碼,等待使用者輸入,然後列印使用者輸入的資料。那麼,怎麼樣把hello.py輸出內容傳送給testinput.py,最後testinput.py列印接收到的 hello,world 下面我來逐步講...
python與cad互動 python與C 互動
python和c 能進行有效的互動,c 呼叫python的一些小用法 寫了乙個python指令碼匯入發生異常,可能是編碼問題 如存在中文 python預設的是ascii 可加上 usr bin python coding utf 8 參見 定義類c資料結構 class point structure...