Python for .net指令碼調用dotnet架構(ref和out參數問題)

來源:互聯網
上載者:User

PythonNet是一個和IronPython想法差不多,但絕不一樣。PythonNet可以讓你寫指令碼來調用.Net Framework ,或者是你自己寫的dll。是在sourceforge上的一個開源項目。用法的話就是先下載一個Python的 解譯器,安裝完後,用下載下來的Python.Net裡相應版本的檔案替換掉原先的。 http://pythonnet.sourceforge.net/ ,支援到dotnet 2.0.

比如,下載了Python 2.5安裝到C盤,路徑是 C:\Python25 ,把D:\pythonnet-2.0-alpha2\python2.5-UCS2目錄中的所有檔案複製到C:\Python25 ,現在就可以使用了。

試試代碼

import System

class Test():
_id = 0
_name = "123"
def __init__(self,id,name):
self._id = id
self._name = name

def main():
app = Test(123,"asd")
System.Console.WriteLine(app._id)
System.Console.WriteLine(app._name)
System.Console.ReadKey()

if __name__ == '__main__':
main()

 

這就是一個控制台程式了,當然,也可以做Winform的。但是,我覺得直接用Python作的話好像沒什麼好處,但是用作調用還是很不錯的。

但是C#裡有ref傳值和out傳值,怎麼辦呢?在Python裡都是傳引用的,但是在這裡似乎不行啊。

 

import System as s
def main():
m = "123"
r = 0
x = s.Int32.TryParse(m,r)
s.Console.WriteLine(r)
s.Console.ReadKey()
if __name__ == '__main__':
main()

上面的代碼輸出值是0,這就明顯不對。但是輸出x是個亂碼,看它的類型,是個數組。
import System as s
def main():
m = "123"
r = 0
x = s.Int32.TryParse(m,r)
s.Console.WriteLine(x[0])
s.Console.WriteLine(x[1])
s.Console.ReadKey()
if __name__ == '__main__':
main()
改造了下代碼果然可以了。輸出了1123第一個1,應該是True的數值表示,而123就是轉換後的值了。而對於ref傳值,也是一樣的。
import SharpBot.Engin as Engin
import HopeUtil.HTML as html
import System as s
def main():
app = Engin.DefaultCrawler("http://www.163.com");
result = html.HTMLSimpleDOM.HTMLSimpleModel()
suc = app.ResponseString(result)
if suc[0]:
s.Console.WriteLine(suc[1].Title)
s.Console.WriteLine(suc[1].MetaCharset)
s.Console.WriteLine(suc[1].Body)
else:
s.Console.WriteLine(123)

if __name__ == '__main__':
main()
上面的ResponseString在C#裡參數是(ref HTMLSimpleDOM.HTMLSimpleModel result)。這裡也返回到了數組中了。用指令碼來測試寫的爬蟲引擎,感覺還不錯。用指令碼操作dotnet感覺就是不一樣。
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.