uTools-Manuals/docs/python/pickletools.html
2019-04-21 11:50:48 +08:00

12 lines
9.3 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<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 &gt;改为。</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">=&lt;file&gt;</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">=&lt;num&gt;</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">=&lt;preamble&gt;</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 pickles 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>