c 呼叫python的方法和坑

2021-10-04 18:48:29 字數 1507 閱讀 8405

1.## ironpython

這個東西用.net做了乙個pyhon直譯器,理論上來說這個東西可以做到和c/c++呼叫pyhton一樣。

實際上東西我沒咋研究,因為只支援py2。。。。坑的一匹

順帶一提,這個東西是乙個非微軟維護的開源專案,用起來沒有巨硬的支援的。

2.## 使用命令列間接呼叫

這是網上實際使用較多的一種方法,但實際用起來我發現還是有問題。以我下列**舉例。

string output;

system.diagnostics.process p;

p = new system.diagnostics.process();

p.startinfo.filename = "cmd.exe";

p.startinfo.useshellexecute = false; //是否使用作業系統shell啟動

p.startinfo.redirectstandardinput = true;//接受來自呼叫程式的輸入資訊

p.startinfo.redirectstandardoutput = true;

p.startinfo.redirectstandarderror = true;//重定向標準錯誤輸出

p.startinfo.createnowindow = true;//不顯示程式視窗

p.start();//啟動程式

p.standardinput.writeline("python \"d://桌面/每日任務式桌面/schedule/python function/desktopimg.py\"");

p.standardinput.writeline("exit");

output = p.standardoutput.readtoend();

p.waitforexit();//等待程式執行完退出程序

p.close();

system.console.write(output);

在如果指令碼不能在數秒之內執行完畢的話waitforexit()就會直接退出程式,而不會等待程式執行完畢,如果直接刪去waitforexit(),雖然不會閃退,但從output的資料來看,還是執行了幾秒就停了,原因還在更深的層次。不管是在winform中還是console中實驗結果都是一樣的,排除了windows訊息迴圈的鍋。

然後。。。這個辦法就不了了之了。

3.## 輸出bat並執行來間接間接呼叫

這個辦法很low,low爆了,而且本質上還是呼叫命令列,所以仍然算作第二種的子類,但是起碼可以執行。。。具體怎麼做就不貼**了,程式輸出乙個包含shell命令的bat檔案並呼叫應該難不倒各位看官。

4.## 通過其他語言來呼叫python

這辦法一聽就知道沒有效率且很麻煩,不過如果要像ironpython一樣呼叫python3,似乎只有這種辦法了。通過python與c的dll的互動然後再與c#互動。注意的要點有

c 呼叫python遇到的坑

簡單的記錄一下,僅供參考。這句好像一定要呼叫,否則py initialize 就會異常,可能跟路徑有關。不知道怎麼設定可以不用呼叫這一句?2 處理python函式返回值的時候,如果返回值是單個字串,以下寫法是對的 pyobject pret pyobject callobject pfunc,arg...

c呼叫python遇到的那些坑

首先得保證安裝完整python的元件 我的是debian系統 apt get install python dev 編譯c程式時候不能簡單的 gcc c 因為會找不到相關的標頭檔案 需要gcc c wall i usr include python2.7 lpython2.7 如果你的python安...

呼叫caffe的Python和C 的方法

方法1 直接寫sh指令碼檔案,再執行sh檔案即可,這種最簡單,也是最常用的,新手可以參照.examples 下的各種例項sh檔案。方法2 在caffe root目錄下,直接在linux的命令列視窗執行 build tools caffe 後面加上相應的引數即可。在linux中編譯caffe的時候,一...