使用Zolom內存解析運行python腳本(不落地)

在目標機器運行python工具

好多工具都是python寫的,若是目標機器是linux的話自帶python環境能夠很方便的運行這些工具,可是windows下是不自帶python環境的,因此一種辦法是直接在目標環境安裝一個python,另一種就是直接在內存加載python腳本。python

ironpython能夠將python腳本轉成.net形式在內存中運行,兩個工具能夠達到目的:linux

Zolom編譯方式

利用git將代碼克隆到本地,而後使用vs2019打開後,再解決方案右鍵-恢復NuGet包。git

代碼解讀

Main函數開始,有兩種方式指定python腳本內容:github

--script讀取的是明文形式的代碼,--b64script讀取的是base64加密的腳本內容,因此基本用法以下:windows

zolom.exe --script:"from random import seed; from random import random; seed(1); print 'getting random number'; print random();"

zolom.exe --b64script:"ZnJvbSByYW5kb20gaW1wb3J0IHNlZWQ7IGZyb20gcmFuZG9tIGltcG9ydCByYW5kb207IHNlZWQoMSk7IHByaW50ICdnZXR0aW5nIHJhbmRvbSBudW1iZXInOyBwcmludCByYW5kb20oKTs="

以後建立腳本引擎,而後將Lib.zip做爲python庫加載到引擎當中:dom

看起來代碼很簡單,加載全部庫到內存以後運行代碼。函數

點1:Lib.zip經過什麼方式打包到exe裏

本來我覺得,編譯以後的exe要和Lib.zip一塊兒放到目標機器裏,後來發現想多了,Lib.zip直接做爲嵌入資源的形式打包到exe裏了。工具

點2:DLL如何打包到exe裏

項目中使用的NuGet包裏除了IronPython,還使用了Costura.FodyFody,把這兩個包卸載以後,從新編譯以後,會發現多出了一堆Dll文件:加密

Uninstall-Package Costura.Fody
Uninstall-Package Fody

由此可知,Costura.Fody能夠很方便的將依賴嵌入到exe中。.net

還原成以前的樣子,須要先將兩個包安裝回去:
注意版本問題,版本過高的話會報錯的

Install-Package Fody -Version 2.0.0
Install-Package Costura.Fody -Version 1.6.2

修改FodyWeavers.xml:

<?xml version="1.0" encoding="utf-8"?>
<Weavers>
	<Costura />
</Weavers>

從新編譯以後,生成的文件又變成了單個的exe:

相關文章
相關標籤/搜索