调用该对象的read()或readlines()方法可以读取输出内容,以下是源码: def popen(cmd, mode="r", buffering=-1): if not isinstance...("invalid mode %r" % mode) if buffering == 0 or buffering is None: raise ValueError("popen...subprocess.run() subprocess模块是官方用来取代 一些旧的模块方法,里面包含很多内容方法,相比os.system()、os.popen()更为完善一些。...subprocess.run()函数执行指定的命令, 等待命令执行完成后返回一个包含执行结果的CompletedProcess类的实例。...用法与os.system()、os.popen()方法一样,传入字符串命令,但在参数的选择相比os.system()和os.popen()多了很多: subprocess.run(f'pyinstaller
前言 compile() 函数将一个字符串编译为字节代码。...参数filename用于在执行代码报错的运行时错误消息中显示该参数对应的信息,当source是执行代码从文件中读取的代码字符串时,则可以存放文件名,如果不是从文件里读取源码来编译,那么这里可以放一些用来标识这些代码的字符串...flags和dont_inherit是用来控制编译源码时的标志 compile 函数返回结果 1、如果编译通过,结果可以生成字节码(类型code)或者AST(抽像语法树),字节码可以使用函数exec()...需要说明的是在 Python2 中exec不是函数,而是一个内置语句; 3、如果编译的源码不合法,此函数会触发 SyntaxError 异常;如果源码包含 空字节(空字符串),则3.5版本以前会触发 ValueError...eval返回给定表达式的值,而exec忽略其代码的返回值,并始终返回None(在Python 2中,它是一个语句,不能用作表达式,因此它不会返回任何内容)。
可以看出代码虽然进行了一定程度的变换,但代码结构基本还是原来的样子,并不能很有效的增加激活成功教程难度。 利用 AST 混淆源码 AST,即抽象语法树,它可以将源代码以树状结构表示。...混淆后的代码使用 __import__ 动态导入模块、使用 getattr 调用类方法,这样就可以以字符串方式传入模块名和方法名,借由字符串翻转拼接、数字计算等方式达到混淆目的,相比之下,AST 方式的混淆效果明显要优于...,确实没办法直接读取源码了,但是 Python 有 uncompyle6 这么一个跨版本反编译器,可以将 Python 字节码转换回等效的 Python 源代码。...由于这种运行方式的特殊性,Pyinstaller 打包的 exe 文件也是可以被还原出源码的。...所以将 Python 打包为 exe 只相当于在编译为 pyc 的基础上添加了一步打包操作,同样不能很有效的对源码进行保护。
否则报错:ValueError: too many values to unpack (expected 2) #下面这个表示将文件\lib\general.pyc拷贝到当前文件夹下,就是解压的__MIE...-F py_word.py 打包exe # 打包成一个文件夹 Pyinstaller py_word.py 打包exe pyinstaller打包文件包含两种情况: (1)将py文件、python及第三方库全部打包为一个单独的...(2)将以上三者打包形成一个文件夹,文件夹中包含一个Exe,一个python,及其依赖的第三方库。...xx.exe 然后再通过python-uncompyle6工具,将pyc文件反编成.py文件 # 安装 pip install uncompyle6 # 反编译 xxx.pyc 文件,输出为 xxx.py 源码文件...各种路径错误导致的问题 很多人在拼接路径的时候喜欢使用+来拼接路径字符串,这会导致在打包后出现各种资源无法访问的错误,且不好排查,建议多使用os.path的各种方法来处理路径。
源可以是普通字符串,字节字符串或AST对象。ast有关如何使用AST对象的信息,请参阅模块文档。...SyntaxError如果编译的源无效,并且ValueError源包含空字节,则此函数会引发。 如果您想将Python代码解析为其AST表示形式,请参阅 ast.parse()。...在版本3.5中更改:以前,TypeError在源中遇到空字节时引发。...如果第一个参数是一个字符串,它将被解释为一个复数,并且该函数必须在没有第二个参数的情况下被调用。第二个参数不能是一个字符串。每个参数可以是任何数字类型(包括复数)。...注意: 从字符串转换时,该字符串不得在中央+或-运算符周围包含空格。例如, complex('1+2j')很好,但引发 。
capture_output:如果设置为True,表示重定向stdout和stderr到管道,且不能再传递stderr或stdout参数,否则抛出异常。...非None的input参数不能和stdin参数一起使用,否则将抛出异常,构造Popen实例的stdin参数将指定为subprocess.PIPE。...,字节编码可能取决于执行的指令,设置universal_newlines=True可以返回string类型的值。...subprocess.getstatusoutput(cmd) 实际上是调用check_output()函数,在shell中执行string类型的cmd指令,返回(exitcode, output)形式的元组,output(包含...stderr和stdout)是使用locale encoding解码的字符串,并删除了结尾的换行符。
str特性 Python strings是不能改变的,字符串的值是固定的。...如果参数keepends=False后者为空或者为0,则不包含"\n",否则包含"\n" 函数示例 >>> s="Line1-a b c d e f\nLine2- a b c\n\nLine4- a...且分隔符不能为空也不能为空串,否则会报错。...字符串不为空,如果为空,则返回False。...字符串不为空,如果为空,则返回False。
如果分隔符未找到,则返回的 3 元组中包含两个空字符串以及字符串本身。...bytearray.isalpha() 如果序列中所有字节都是字母类 ASCII 字符并且序列不非空则返回 True ,否则返回 False 。...bytearray.isascii() 如果序列为空或序列中所有字节都是 ASCII 字节则返回 True ,否则返回 False 。...bytearray.isdigit() 如果序列中所有字节都是 ASCII 十进制数码并且序列非空则返回 True ,否则返回 False 。...bytearray.isspace() 如果序列中所有字节都是 ASCII 空白符并且序列非空则返回 True ,否则返回 False 。
接下来,使用标准库py_compile对源码文件进行编译,得到两种优化级别的字节码,如图 ? 切换到命令提示符cmd环境,分别执行源码文件和两个字节码文件,如图 ?...按照本文前面介绍的方法,对得到的优化字节码文件进行反编译,结果如下,可以发现其中不包含源码中的注释,所有assert语句都被删除。 ?...同理,对不设置优化级别得到的字节码进行反编译,查看源码,会发现没有包含源码中的注释(编译时只会删除井号开头的行注释,不会删除三引号内的块注释,请自行验证),但是保留了assert断言语句。...同时也可以发现,把Python程序编译为源码发布并不能对源码起到任何保护,可以很容易地反编译得到源码。...如果确实想保护源码,可以使用pyinstaller之类的工具打包为二进制可执行文件,虽然也可以通过特殊手段得到源码,但难度要大上很多,本文不介绍这个技术。
]) PictureToPDF(r'C:\Users\Yezi\Desktop\Temp', 'test') 但这个有缺陷,部分图片转换过程有漏洞,经过多次实验,发现部分图片会出现这种错误: ValueError...,,因为 \ 会形成转义字符,所以我们在前面加了个r ,表示不用转义字符,但是在弄成可执行文件的时候,路径是个参数,不能加r了,因此,我写了个函数把路径这个字符串变成可以识别的路径,这样的路径可以识别:...pip install Pyinstaller 准备好图标和代码文件。 进入相应文件夹。 用这个命令(后面的图标名和文件名需要进行相应的修改哦)。 pyinstaller -F -i ....os.listdir(path) os.listdir(path)是用来返回path指定的文件夹包含的文件或文件夹的名字的列表。...str.lower() str.lower()会返回将字符串中所有大写字符转换为小写后生成的字符串。 PIL模块 好像就是pillow。
步骤: 安装 PyInstaller: 打开终端(如 cmd 或 PowerShell),运行以下命令安装 PyInstaller: pip install pyinstaller 生成可执行文件: 在...方法 2:将代码转换为字节码 将 Python 脚本编译为 .pyc 文件,分发 .pyc 而非 .py 文件。...步骤: 编译为字节码: 在终端运行以下命令: python -m compileall clean.py 运行后,会生成一个 __pycache__ 文件夹,里面包含类似 clean.cpython-XX.pyc...文件大小对比 方法 文件类型 文件大小范围 说明 方法 1:EXE .exe 5-50 MB 包含运行环境,适合无 Python 环境用户。...方法 2:字节码 .pyc 原文件的 1.2 倍 简单、文件体积小,但依赖 Python 环境。
个人博客地址:https://blog.csdn.net/as604049322 今天我将教大家如何反编译exe文件,即将自己或别人写好的exe,还原成Python源码。...所以我们需要先对提取出的内容人工修改后缀: 运行入口pyc文件反编译 对于从pyinstaller提取出来的pyc文件并不能直接反编译,入口运行类共16字节的 magic 和 时间戳被去掉了。...提取出来的pyc文件进行对比: 可以看到前16个字节都被去掉了,其中前四个字节是magic,这四个字节会随着系统和Python版本发生变化,必须一致。...我们先通过UltraEdit32向pyinstaller提取的文件添加头信息: 选择开头插入16个字节后,只需要替换前4个字节为当前环境下的magic: 然后执行: uncompyle6 auto_organize_gui.exe_extracted...这个时候还想反编译就需要底层的逆向分析研究了,或者pyinstaller的源码完整研究一遍,了解其加密处理的机制,看看有没有破解的可能。
() 将字符串转换为字节。...如果它是一个整数,则将其作为数组的长度,并将用空字节进行初始化。 如果它是符合缓冲区接口的对象,则将使用该对象的只读缓冲区来初始化字节数组。...> 从字符串转换时,该字符串不得在 + 或 - 运算符周围包含空格。例如,complex('1+2j') 很好,但 complex('1 + 2j') 会引发 ValueError。...如果提供的迭代器为空,则 default 参数指定要返回的对象。如果迭代器为空且未提供缺省值,则会引发 ValueError。 如果最大值包含多个 item,则该函数返回遇到的第一个 item。...如果提供的迭代器为空,则 default 参数指定要返回的对象。如果迭代器为空且未提供缺省值,则会引发 ValueError。 如果最小值包含多个 item,则该函数返回遇到的第一个 item。
字符串(str):用于存储文本数据,即一系列字符。Python中的字符串是不可变的,意味着一旦创建,就不能更改字符串中的字符。...字节串(bytes):与字符串类似,但字节串用于存储字节数据(如二进制数据)。字节串也是不可变的。 NoneType(None):表示空值或“无”的特殊数据类型。它只有一个值:None。...一旦创建,就不能更改元组中的元素。元组通常用于存储不应该改变的数据。 集合(set):无序的、不包含重复元素的集合。集合主要用于数学上的集合操作,如并集、交集、差集和对称差集。...这意味着你可以修改列表、集合和字典的内容,但不能修改字符串和字节串的内容(尽管你可以创建新的字符串或字节串来反映更改)。...字符串的创建 字符串可以使用单引号(')、双引号(")或三引号(''' 或 """)来创建。单引号和双引号在功能上是等价的,而三引号通常用于创建多行字符串或包含特殊字符(如换行符)的字符串。
=不等于、==等于、=大于等于 字符串比较ASCII编码(小写字母编码大于大写字母,小鬼不能当家,往后排) 排序操作 sorted(s,key=None,reverse=False)...:续行符\:反斜杠符号":双引号':单引号\e:转义\000:空\v:纵向制表符\t:横向制表符\f:换页\o**:八进制数,**表示字符\x**:十六进制数,**表示字符 字符串的判断 函数描述函数描述...str.isdigit()是否全是数字str.isdecimal()是否只包含十进制数字字符str.isalpha()是否全是字母str.isnumeric()是否只包含数字str.isalnum()是否全是字母或数字...而isdigit函数, 如果是Unicode数字、byte数字(单字节)、全角数字(双字节)和罗马数字是为真, 只有汉字数字 为假。...如果搜索不到sep,返回的3元组中,有两个元素是空,partition后两个元素是空,rpartition前两个是空。
前言将 Python 可执行文件(.exe)反编译为 Python 脚本是一项有趣的技术挑战,可以帮助我们理解程序的工作原理,以及可能包含的逻辑和算法。...在 Python 中,由于其解释性质,通常没有像编译语言那样生成的二进制文件,但是我们可以将 Python 脚本转换为字节码文件(.pyc),而 .exe 文件通常是由 pyinstaller、cx_Freeze...提取出来的 pyc 文件并不能直接反编译,入口运行类共16字节的 magic 和 时间戳被去掉了。...4个字节。...在线工具我们也可以使用一些在线工具进行解密,比如:https://ctfever.uniiem.com/tools/pyc-decompiler可能遇到的问题PYZ-00.pyz_extracted 文件为空构建
- an integer # (copied from class doc) """ # 1.定义空的字节序列bytes bytes() ->...empty bytes # 2.定义指定个数的字节序列bytes,默认以0填充,不能是浮点数 bytes(int) -> bytes of size given by the parameter...initialized with null bytes # 3.定义指定内容的字节序列bytes bytes(iterable_of_ints) # 4.定义字节序列bytes,如果包含中文的时候必须设置编码格式....bytes函数使用 1.定义空的字节序列bytes # !...之间的整数,不能大于或者等于256 b1 = bytes([1, 257]) >>> ValueError: bytes must be in range(0, 256) 4.定义个字节序列
def关键字后跟函数的标识符名称,然后跟一对圆括号,括号之内可以包含一些变量名,该行以冒号结尾;接下来是一块语句,即函数体。...在python程序中导入其他模块使用'import', 所导入的模块必须在sys.path所列的目录中,因为sys.path第一个字符串是空串''即当前目录,所以程序中可导入当前目录的模块。 1....字节编译的.pyc文件 导入模块比较费时,python做了优化,以便导入模块更快些。一种方法是创建字节编译的文件,这些文件以.pyc为扩展名。 ...del -> 删除一个变量/名称,del之后,该变量就不能再使用。 四、数据结构 python有三种内建的数据结构:列表、元组和字典。 1....列表的项目包含在方括号[]中,eg: [1, 2, 3], 空列表[]。
将十进制转换为二进制: >>> bin(10) '0b1010' 2 十转八 十进制转换为八进制: >>> oct(9) '0o11' 3 十转十六 十进制转换为十六进制: >>> hex(15) '0xf' 4 字符串转字节...字符串转换为字节类型 >>> s = "apple" >>> bytes(s,encoding='utf-8') b'apple' 5 转为字符串 字符类型、数值型等转换为字符串类型 >>> i =...>>> float(3) 3.0 如果不能转化为浮点数,则会报ValueError: >>> float('a') Traceback (most recent call last): File..."", line 1, in float('a') ValueError: could not convert string to float: 'a'...如果参数是字符串,那么它可能包含符号和小数点。 如果超出整数表示范围,一个长整数被返回。
default 实参是当可迭代对象为空时返回的值。如果可迭代对象为空,并且没有给 default ,则会触发 ValueError。 如果有多个最大元素,则此函数将返回第一个找到的。...default 实参是当可迭代对象为空时返回的值。如果可迭代对象为空,并且没有给 default ,则会触发 ValueError。 如果有多个最小元素,则此函数将返回第一个找到的。...如果第一个形参是字符串,则它被解释为一个复数,并且函数调用时必须没有第二个形参。第二个形参不能是字符串。每个实参都可以是任意的数值类型(包括复数)。...注解 当从字符串转换时,字符串在 + 或 – 的周围必须不能有空格。例如 complex(‘1+2j’) 是合法的,但 complex(‘1 + 2j’) 会触发 ValueError 异常。...class float([x]) 返回从数字或字符串 x 生成的浮点数。 如果实参是字符串,则它必须是包含十进制数字的字符串,字符串前面可以有符号,之前也可以有空格。
领取专属 10元无门槛券
手把手带您无忧上云