【问题标题】:Self decompressing and executing code in python在python中自解压和执行代码
【发布时间】:2014-01-16 04:46:52
【问题描述】:

这是创建压缩文件的代码,其中包含任意 python 代码。这个想法是你在 raw_code 变量赋值中粘贴某种 python 程序,然后运行创建一个 .py 文件的脚本,该文件是功能性 python 代码,打开另一个 python shell 并执行存储在其中的压缩代码。

import zlib

raw_code = """print 'hello world' """

code_prefix = """import zlib
import os

compressed_code = \"\"\"
"""

code_postfix = """
\"\"\"

os.system('python ' + zlib.decompress(compressed_code))
"""

full_code = code_prefix + zlib.compress(raw_code) + code_postfix


with open("/some/kind/of/path/compCode.py", "wb") as outfile:
    outfile.write(full_code)

您从中获得的文件如下所示:

import zlib
import os

compressed_code = """
x��*(��+QP�H���W(�/�IQ�N�
"""

os.system('python ' + zlib.decompress(compressed_code))

我遇到的问题是尝试运行第二个文件会导致错误:

  File "compCode.py", line 6
SyntaxError: Non-ASCII character '\x9c' in file compressedPYCode.py on line 7, 
but no encoding declared; see http://www.python.org/peps/pep-0263.html for details

在compressed_code 变量之前添加'r' 没有帮助。我正在尝试做的事情真的可能吗?

【问题讨论】:

    标签: python metaprogramming


    【解决方案1】:

    尝试将# -*- coding: utf-8 -*- 放在脚本的第一行。

    您可以强制编码以使字符串正确加载,但里程可能会有所不同。如果字符串中有空字节或其他内容,它们显然不会被正确存储。

    【讨论】:

      猜你喜欢
      • 2013-09-26
      • 1970-01-01
      • 2012-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-09
      • 2016-05-19
      相关资源
      最近更新 更多