今天試用了好幾種方法,最終只有乙個方法成功,現將今天的收穫和問題做個筆記
這個方法首先要在vs中安裝配置ironpython,且如果python指令碼中包含第三方模組,這個方法大多會報錯說找不到import的包(但有的也能成功),在網上也很難找到該問題的解決方法,所以這個方法比較使用於呼叫不包含第三方模組的python指令碼。
c#**:
using microsoft.scripting.hosting;
using ironpython.hosting;
//在具體方法裡面寫如下**
scriptengine pyengine = python.createengine();//建立python直譯器物件
dynamic py = pyengine.executefile("new.py");//讀取指令碼檔案
double str =123.789;
py.test(str);//呼叫new.py檔案中的test方法,並傳入引數
這個方法不需要另外安裝東西,我乙個同學是使用這個方法成功了,可以呼叫包含第三方模組的python指令碼,但是我的不行,可能是各自的環境不同。
c#**:
using microsoft.scripting.hosting;
//在具體方法裡面寫如下**
scriptruntime scriptruntime = scriptruntime.createfromconfiguration();
scriptengine rbeng = scriptruntime.getengine("python");
dynamic py = scriptruntime.usefile("models.py");//將python指令碼「models.py」放在c#專案的debug檔案下,若不是就寫檔案的絕對路徑
py.main(modelname, inputpath, resultkind, resultpath);//呼叫python指令碼的main()方法,並傳入引數
這個方法也不需要另外安裝東西,不管呼叫的python指令碼是否包含第三方模組都比較適用,而且我也試驗成功了,就是**多了一點,不過這個方法大多數都普遍適用。
c#**:
using system;
using system.collections.generic;
using system.diagnostics;
using system.linq;
using system.text;
using system.threading.tasks;
using microsoft.scripting.hosting;
using system.collections;
*/p.startinfo.filename = @"d:\software\python\result\python 2.7\python.exe"; 的安裝路徑,若配置了python的環境變數,可以直接寫成"python.exe"
p.startinfo.arguments = sarguments;//python命令的引數,若不傳參,則只有python指令碼的路徑
p.startinfo.useshellexecute = false;
p.startinfo.redirectstandardoutput = true;
p.startinfo.redirectstandardinput = true;
p.startinfo.redirectstandarderror = true;
p.startinfo.createnowindow = true;
p.start();//啟動程序
}
python**:
import sys #匯入sys module
defsetuptxt
: anwser_all,probas_all,probas_test=analysis_data(modelname,x_train,x_test,y_train,y_test,predict_x)
output_data(y_test,anwser_all,probas_all,probas_test,resultkind,resultpath)
#主要是下面這一行**,sys.ar**[i]就是c#那邊傳過來的引數,直接呼叫上面是自定義的方法setuptxt
setuptxt(sys.ar**[1]
, sys.ar**[2]
, sys.ar**[3]
,sys.ar**[4]
,sys.ar**[5]
)
**注:**如果是窗體應用,又想要檢視python指令碼中的引數值,可以直接在python中寫print()方法,然後在vs中進行如下設定:
1、[專案名稱]——>右鍵[屬性]——>[應用程式]——>修改[輸出型別]為「控制台應用程式」
2、若使用的是方法三,則在以上**後面還需新增如下**:
p.beginoutputreadline();
p.outputdatareceived += new datareceivedeventhandler(p_outputdatareceived);
console.readline();
p.waitforexit();//以上部分寫在上面方法三的函式**後面
//下面另外定義函式方法,以輸出列印的資訊
static void p_outputdatareceived(object sender, datareceivedeventargs e)
}
借鑑部落格及文章: C 呼叫python檔案
環境 win10 vs2017 anaconda3 python3.6 注意 在debug模式有可能編譯錯誤,換成release就好。1.新增python3.6中對應的include和libs 複製乙份libs下的python36.lib,並重命名為python36 d.lib,新增到聯結器輸出 p...
C 呼叫Python檔案執行
我的電腦環境是使用.net framework4.5.1,如果在除錯過程中調不通請注意 1 首先先說乙個簡單的功能,在c 中執行python字串,內容如下 2 c 呼叫python檔案 在當前目錄下新建乙個字尾名為py的檔案,檔名為amoutdisc.py內容如下 dicamt 0.05 retam...
C 呼叫Python檔案 執行Python方法
inronpython是一種在.net和mono上實現的python語言,使用inronpython就可以在.net環境中呼叫python 安裝inronpython py檔案 coding utf 8 import sys reload sys sys.setdefaultencoding utf...