zoukankan      html  css  js  c++  java
  • 使用Zolom内存解析运行python脚本(不落地)

    在目标机器运行python工具

    好多工具都是python写的,如果目标机器是linux的话自带python环境可以很方便的运行这些工具,但是windows下是不自带python环境的,所以一种办法是直接在目标环境安装一个python,另外一种就是直接在内存加载python脚本。

    ironpython可以将python脚本转成.net形式在内存中运行,两个工具可以达到目的:

    Zolom编译方式

    利用git将代码克隆到本地,然后使用vs2019打开后,再解决方案右键-恢复NuGet包。

    代码解读

    Main函数开始,有两种方式指定python脚本内容:

    --script读取的是明文形式的代码,--b64script读取的是base64加密的脚本内容,所以基本用法如下:

    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库加载到引擎当中:

    看起来代码很简单,加载所有库到内存之后运行代码。

    点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中。

    还原成之前的样子,需要先将两个包安装回去:
    注意版本问题,版本太高的话会报错的

    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:

  • 相关阅读:
    Dockerfile 构建前端node应用并用shell脚本实现jenkins自动构建
    Nginx自定义404页面
    shell脚本逐个杀死k8s中某个应用的pod
    阿里云容器镜像加速器配置
    jenkins shell脚本自动化构建阿里云k8s上应用
    在容器服务kubernetes上配置https
    docker build 指定dockerfile
    centos 7 系统启动不了 出现报错dependency failed for /mnt , dependency failed for local file systems
    向Kubernetes集群删除Node
    SharePoint 2013 关于自定义显示列表表单的bug
  • 原文地址:https://www.cnblogs.com/cxccc/p/13521099.html
Copyright © 2011-2022 走看看