C 呼叫Python檔案

2021-09-18 04:00:16 字數 2886 閱讀 6025

今天試用了好幾種方法,最終只有乙個方法成功,現將今天的收穫和問題做個筆記

這個方法首先要在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...