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

13 lines
10 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-termios"><h1><span class="yiyi-st" id="yiyi-10">35.6. <a class="reference internal" href="#module-termios" title="termios: POSIX style tty control. (Unix)"><code class="xref py py-mod docutils literal"><span class="pre">termios</span></code></a> - POSIX style tty control </span></h1><p><span class="yiyi-st" id="yiyi-11">此模块为POSIX调用提供了一个接口用于tty I / O控制。</span><span class="yiyi-st" id="yiyi-12">有关这些调用的完整说明,请参阅<em class="manpage">termios2</em> Unix手册页。</span><span class="yiyi-st" id="yiyi-13">它仅适用于支持在安装期间配置的POSIX <em>termios</em>样式tty I / O控制的那些Unix版本。</span></p><p><span class="yiyi-st" id="yiyi-14">该模块中的所有函数都接受一个文件描述器<em>fd</em>作为它们的第一个参数。</span><span class="yiyi-st" id="yiyi-15">这可以是整型文件描述器,例如由<code class="docutils literal"><span class="pre">sys.stdin.fileno()</span></code><a class="reference internal" href="../glossary.html#term-file-object"><span class="xref std std-term">file object</span></a>返回,例如<code class="docutils literal"><span class="pre">sys.stdin</span></code></span></p><p><span class="yiyi-st" id="yiyi-16">此模块还定义了使用此处提供的函数所需的所有常量这些名称与C中的对应名称相同。有关使用这些端子控制接口的更多信息请参阅系统文档。</span></p><p><span class="yiyi-st" id="yiyi-17">该模块定义了以下功能:</span></p><dl class="function"><dt id="termios.tcgetattr"><span class="yiyi-st" id="yiyi-18"> <code class="descclassname">termios.</code><code class="descname">tcgetattr</code><span class="sig-paren">(</span><em>fd</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-19">Return a list containing the tty attributes for file descriptor <em>fd</em>, as follows: <code class="docutils literal"><span class="pre">[iflag,</span> <span class="pre">oflag,</span> <span class="pre">cflag,</span> <span class="pre">lflag,</span> <span class="pre">ispeed,</span> <span class="pre">ospeed,</span> <span class="pre">cc]</span></code> where <em>cc</em> is a list of the tty special characters (each a string of length 1, except the items with indices <code class="xref py py-const docutils literal"><span class="pre">VMIN</span></code> and <code class="xref py py-const docutils literal"><span class="pre">VTIME</span></code>, which are integers when these fields are defined). </span><span class="yiyi-st" id="yiyi-20">必须使用<a class="reference internal" href="#module-termios" title="termios: POSIX style tty control. (Unix)"><code class="xref py py-mod docutils literal"><span class="pre">termios</span></code></a>模块中定义的符号常量来解释标志和速度以及<em>cc</em>数组中的索引。</span></p></dd></dl><dl class="function"><dt id="termios.tcsetattr"><span class="yiyi-st" id="yiyi-21"> <code class="descclassname">termios.</code><code class="descname">tcsetattr</code><span class="sig-paren">(</span><em>fd</em>, <em>when</em>, <em>attributes</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-22"><em>属性</em>中设置文件描述器<em>fd</em>的tty属性这是像<a class="reference internal" href="#termios.tcgetattr" title="termios.tcgetattr"><code class="xref py py-func docutils literal"><span class="pre">tcgetattr()</span></code></a>返回的列表。</span><span class="yiyi-st" id="yiyi-23"><em>参数确定属性何时更改:<code class="xref py py-const docutils literal"><span class="pre">TCSANOW</span></code>立即更改,<code class="xref py py-const docutils literal"><span class="pre">TCSADRAIN</span></code>在传输所有排队输出后更改,或<code class="xref py py-const docutils literal"><span class="pre">TCSAFLUSH</span></code>在发送所有排队的输出并丢弃所有排队的输入后进行更改。</em></span></p></dd></dl><dl class="function"><dt id="termios.tcsendbreak"><span class="yiyi-st" id="yiyi-24"> <code class="descclassname">termios.</code><code class="descname">tcsendbreak</code><span class="sig-paren">(</span><em>fd</em>, <em>duration</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-25">发送休息描述器<em>fd</em></span><span class="yiyi-st" id="yiyi-26"><em>持续时间</em>发送0.25-0.5秒的中断;非零的<em>持续时间</em>具有系统相关含义。</span></p></dd></dl><dl class="function"><dt id="termios.tcdrain"><span class="yiyi-st" id="yiyi-27"> <code class="descclassname">termios.</code><code class="descname">tcdrain</code><span class="sig-paren">(</span><em>fd</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-28">等待直到所有写入文件描述器<em>fd</em>的输出被发送。</span></p></dd></dl><dl class="function"><dt id="termios.tcflush"><span class="yiyi-st" id="yiyi-29"> <code class="descclassname">termios.</code><code class="descname">tcflush</code><span class="sig-paren">(</span><em>fd</em>, <em>queue</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-30">舍弃队列中的数据描述器<em>fd</em></span><span class="yiyi-st" id="yiyi-31"><em>队列</em>选择器指定输入队列的<code class="xref py py-const docutils literal"><span class="pre">TCIFLUSH</span></code>,输出队列的<code class="xref py py-const docutils literal"><span class="pre">TCOFLUSH</span></code>,或<code class="xref py py-const docutils literal"><span class="pre">TCIOFLUSH</span></code>两个队列。</span></p></dd></dl><dl class="function"><dt id="termios.tcflow"><span class="yiyi-st" id="yiyi-32"> <code class="descclassname">termios.</code><code class="descname">tcflow</code><span class="sig-paren">(</span><em>fd</em>, <em>action</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-33">暂停或继续输入或输出到文件描述器<em>fd</em></span><span class="yiyi-st" id="yiyi-34">The <em>action</em> argument can be <code class="xref py py-const docutils literal"><span class="pre">TCOOFF</span></code> to suspend output, <code class="xref py py-const docutils literal"><span class="pre">TCOON</span></code> to restart output, <code class="xref py py-const docutils literal"><span class="pre">TCIOFF</span></code> to suspend input, or <code class="xref py py-const docutils literal"><span class="pre">TCION</span></code> to restart input.</span></p></dd></dl><div class="admonition seealso"><p class="first admonition-title"><span class="yiyi-st" id="yiyi-35">也可以看看</span></p><dl class="last docutils"><dt><span class="yiyi-st" id="yiyi-36">模块<a class="reference internal" href="tty.html#module-tty" title="tty: Utility functions that perform common terminal control operations. (Unix)"><code class="xref py py-mod docutils literal"><span class="pre">tty</span></code></a></span></dt><dd><span class="yiyi-st" id="yiyi-37">公共端控制操作的方便功能。</span></dd></dl></div><div class="section" id="example"><h2><span class="yiyi-st" id="yiyi-38">35.6.1. </span><span class="yiyi-st" id="yiyi-39">Example</span></h2><p><span class="yiyi-st" id="yiyi-40">这里有一个函数提示输入密码并关闭echo。</span><span class="yiyi-st" id="yiyi-41">请注意使用单独的<a class="reference internal" href="#termios.tcgetattr" title="termios.tcgetattr"><code class="xref py py-func docutils literal"><span class="pre">tcgetattr()</span></code></a>调用和<a class="reference internal" href="../reference/compound_stmts.html#try"><code class="xref std std-keyword docutils literal"><span class="pre">try</span></code></a> ... <a class="reference internal" href="../reference/compound_stmts.html#finally"><code class="xref std std-keyword docutils literal"><span class="pre">finally</span></code></a>语句的技术以确保旧tty属性完全还原发生什么事</span></p><pre><code class="language-python"><span></span><span class="k">def</span> <span class="nf">getpass</span><span class="p">(</span><span class="n">prompt</span><span class="o">=</span><span class="s2">"Password: "</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">termios</span><span class="o">,</span> <span class="nn">sys</span>
<span class="n">fd</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">fileno</span><span class="p">()</span>
<span class="n">old</span> <span class="o">=</span> <span class="n">termios</span><span class="o">.</span><span class="n">tcgetattr</span><span class="p">(</span><span class="n">fd</span><span class="p">)</span>
<span class="n">new</span> <span class="o">=</span> <span class="n">termios</span><span class="o">.</span><span class="n">tcgetattr</span><span class="p">(</span><span class="n">fd</span><span class="p">)</span>
<span class="n">new</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="o">=</span> <span class="n">new</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="o">&amp;</span> <span class="o">~</span><span class="n">termios</span><span class="o">.</span><span class="n">ECHO</span> <span class="c1"># lflags</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">termios</span><span class="o">.</span><span class="n">tcsetattr</span><span class="p">(</span><span class="n">fd</span><span class="p">,</span> <span class="n">termios</span><span class="o">.</span><span class="n">TCSADRAIN</span><span class="p">,</span> <span class="n">new</span><span class="p">)</span>
<span class="n">passwd</span> <span class="o">=</span> <span class="nb">input</span><span class="p">(</span><span class="n">prompt</span><span class="p">)</span>
<span class="k">finally</span><span class="p">:</span>
<span class="n">termios</span><span class="o">.</span><span class="n">tcsetattr</span><span class="p">(</span><span class="n">fd</span><span class="p">,</span> <span class="n">termios</span><span class="o">.</span><span class="n">TCSADRAIN</span><span class="p">,</span> <span class="n">old</span><span class="p">)</span>
<span class="k">return</span> <span class="n">passwd</span>
</code></pre></div></div></div>