mirror of
https://github.com/fofolee/uTools-Manuals.git
synced 2025-06-08 23:14:06 +08:00
12 lines
9.3 KiB
HTML
12 lines
9.3 KiB
HTML
<div class="body" role="main"><div class="section" id="module-pickletools"><h1><span class="yiyi-st" id="yiyi-10">32.13. <a class="reference internal" href="#module-pickletools" title="pickletools: Contains extensive comments about the pickle protocols and pickle-machine opcodes, as well as some useful functions."><code class="xref py py-mod docutils literal"><span class="pre">pickletools</span></code></a> - 腌菜开发者的工具</span></h1><p><span class="yiyi-st" id="yiyi-11"><strong>源代码:</strong> <a class="reference external" href="https://hg.python.org/cpython/file/3.5/Lib/pickletools.py">Lib / pickletools.py</a></span></p><p><span class="yiyi-st" id="yiyi-12">此模块包含与<a class="reference internal" href="pickle.html#module-pickle" title="pickle: Convert Python objects to streams of bytes and back."><code class="xref py py-mod docutils literal"><span class="pre">pickle</span></code></a>模块的详细细节相关的各种常量,有关实现的一些冗长注释,以及一些用于分析pickled数据的有用函数。</span><span class="yiyi-st" id="yiyi-13">该模块的内容对于正在处理<a class="reference internal" href="pickle.html#module-pickle" title="pickle: Convert Python objects to streams of bytes and back."><code class="xref py py-mod docutils literal"><span class="pre">pickle</span></code></a>的Python核心开发人员很有用;普通用户的<a class="reference internal" href="pickle.html#module-pickle" title="pickle: Convert Python objects to streams of bytes and back."><code class="xref py py-mod docutils literal"><span class="pre">pickle</span></code></a>模块可能找不到<a class="reference internal" href="#module-pickletools" title="pickletools: Contains extensive comments about the pickle protocols and pickle-machine opcodes, as well as some useful functions."><code class="xref py py-mod docutils literal"><span class="pre">pickletools</span></code></a>模块相关。</span></p><div class="section" id="command-line-usage"><h2><span class="yiyi-st" id="yiyi-14">32.13.1. </span><span class="yiyi-st" id="yiyi-15">Command line usage</span></h2><div class="versionadded"><p><span class="yiyi-st" id="yiyi-16"><span class="versionmodified">版本3.2中的新功能。</span></span></p></div><p><span class="yiyi-st" id="yiyi-17">从命令行调用时,<code class="docutils literal"><span class="pre">python</span> <span class="pre">-m</span> <span class="pre">pickletools</span></code>将反汇编一个或多个pickle文件的内容。</span><span class="yiyi-st" id="yiyi-18">注意,如果你想看到存储在pickle中的Python对象,而不是pickle格式的细节,你可以使用<code class="docutils literal"><span class="pre">-m</span> <span class="pre">pickle</span> t0 >改为。</code></span><span class="yiyi-st" id="yiyi-19">但是,当要检查的pickle文件来自不受信任的来源时,<code class="docutils literal"><span class="pre">-m</span> <span class="pre">pickletools</span></code>是一个更安全的选项, pickle字节码。</span></p><p><span class="yiyi-st" id="yiyi-20">For example, with a tuple <code class="docutils literal"><span class="pre">(1,</span> <span class="pre">2)</span></code> pickled in file <code class="docutils literal"><span class="pre">x.pickle</span></code>:</span></p><div class="highlight-shell-session"><div class="highlight"><pre><span></span><span class="gp">$</span> python -m pickle x.pickle
|
||
<span class="go">(1, 2)</span>
|
||
|
||
<span class="gp">$</span> python -m pickletools x.pickle
|
||
<span class="go"> 0: \x80 PROTO 3</span>
|
||
<span class="go"> 2: K BININT1 1</span>
|
||
<span class="go"> 4: K BININT1 2</span>
|
||
<span class="go"> 6: \x86 TUPLE2</span>
|
||
<span class="go"> 7: q BINPUT 0</span>
|
||
<span class="go"> 9: . STOP</span>
|
||
<span class="go">highest protocol among opcodes = 2</span>
|
||
</pre></div></div><div class="section" id="command-line-options"><h3><span class="yiyi-st" id="yiyi-21">32.13.1.1. </span><span class="yiyi-st" id="yiyi-22">Command line options</span></h3><dl class="cmdoption"><dt id="cmdoption-pickletools-a"><span class="yiyi-st" id="yiyi-23"> <span id="cmdoption-pickletools--annotate"></span><code class="descname">-a</code><code class="descclassname"></code><code class="descclassname">, </code><code class="descname">--annotate</code><code class="descclassname"></code></span></dt><dd><p><span class="yiyi-st" id="yiyi-24">使用简短的操作码描述注释每一行。</span></p></dd></dl><dl class="cmdoption"><dt id="cmdoption-pickletools-o"><span class="yiyi-st" id="yiyi-25"> <span id="cmdoption-pickletools--output"></span><code class="descname">-o</code><code class="descclassname"></code><code class="descclassname">, </code><code class="descname">--output</code><code class="descclassname">=<file></code></span></dt><dd><p><span class="yiyi-st" id="yiyi-26">应写入输出的文件的名称。</span></p></dd></dl><dl class="cmdoption"><dt id="cmdoption-pickletools-l"><span class="yiyi-st" id="yiyi-27"> <span id="cmdoption-pickletools--indentlevel"></span><code class="descname">-l</code><code class="descclassname"></code><code class="descclassname">, </code><code class="descname">--indentlevel</code><code class="descclassname">=<num></code></span></dt><dd><p><span class="yiyi-st" id="yiyi-28">缩进新MARK级别的空白数。</span></p></dd></dl><dl class="cmdoption"><dt id="cmdoption-pickletools-m"><span class="yiyi-st" id="yiyi-29"> <span id="cmdoption-pickletools--memo"></span><code class="descname">-m</code><code class="descclassname"></code><code class="descclassname">, </code><code class="descname">--memo</code><code class="descclassname"></code></span></dt><dd><p><span class="yiyi-st" id="yiyi-30">拆卸多个对象时,在拆卸之间保留备注。</span></p></dd></dl><dl class="cmdoption"><dt id="cmdoption-pickletools-p"><span class="yiyi-st" id="yiyi-31"> <span id="cmdoption-pickletools--preamble"></span><code class="descname">-p</code><code class="descclassname"></code><code class="descclassname">, </code><code class="descname">--preamble</code><code class="descclassname">=<preamble></code></span></dt><dd><p><span class="yiyi-st" id="yiyi-32">当指定了多个pickle文件时,在每次拆卸之前打印给定的前导。</span></p></dd></dl></div></div><div class="section" id="programmatic-interface"><h2><span class="yiyi-st" id="yiyi-33">32.13.2. </span><span class="yiyi-st" id="yiyi-34">Programmatic Interface</span></h2><dl class="function"><dt id="pickletools.dis"><span class="yiyi-st" id="yiyi-35"> <code class="descclassname">pickletools.</code><code class="descname">dis</code><span class="sig-paren">(</span><em>pickle</em>, <em>out=None</em>, <em>memo=None</em>, <em>indentlevel=4</em>, <em>annotate=0</em><span class="sig-paren">)</span></span></dt><dd><span class="yiyi-st" id="yiyi-37"><blockquote> <div>Outputs a symbolic disassembly of the pickle to the file-like object <em>out</em>, defaulting to <code class="docutils literal"><span class="pre">sys.stdout</span></code>. <em>pickle</em> can be a string or a file-like object. <em>memo</em> can be a Python dictionary that will be used as the pickle’s memo; it can be used to perform disassemblies across multiple pickles created by the same pickler. Successive levels, indicated by <code class="docutils literal"><span class="pre">MARK</span></code> opcodes in the stream, are indented by <em>indentlevel</em> spaces. If a nonzero value is given to <em>annotate</em>, each opcode in the output is annotated with a short description. The value of <em>annotate</em> is used as a hint for the column where annotation should start.</div></blockquote></span><div class="versionadded"><p><span class="yiyi-st" id="yiyi-36"><span class="versionmodified">版本3.2中的新功能:</span> <em>注释</em>参数。</span></p></div></dd></dl><dl class="function"><dt id="pickletools.genops"><span class="yiyi-st" id="yiyi-38"> <code class="descclassname">pickletools.</code><code class="descname">genops</code><span class="sig-paren">(</span><em>pickle</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-39">在pickle中的所有操作码上提供<a class="reference internal" href="../glossary.html#term-iterator"><span class="xref std std-term">iterator</span></a>,返回<code class="docutils literal"><span class="pre">(操作码,</span> <span class="pre">arg,</span> <span class="pre">pos) </span></code>三元组。</span><span class="yiyi-st" id="yiyi-40"><em>opcode</em>是<code class="xref py py-class docutils literal"><span class="pre">OpcodeInfo</span></code>类的实例; <em>arg</em>是操作码参数的解码值,作为Python对象; <em>pos</em>是此操作码所在的位置。</span><span class="yiyi-st" id="yiyi-41"><em>pickle</em>可以是字符串或类似文件的对象。</span></p></dd></dl><dl class="function"><dt id="pickletools.optimize"><span class="yiyi-st" id="yiyi-42"> <code class="descclassname">pickletools.</code><code class="descname">optimize</code><span class="sig-paren">(</span><em>picklestring</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-43">在删除未使用的<code class="docutils literal"><span class="pre">PUT</span></code>操作码后,返回一个新的等效pickle字符串。</span><span class="yiyi-st" id="yiyi-44">优化的泡菜更短,需要更少的传输时间,需要更少的存储空间,更有效地解开。</span></p></dd></dl></div></div></div> |