mirror of
https://github.com/fofolee/uTools-Manuals.git
synced 2025-06-08 06:55:36 +08:00
13 lines
10 KiB
HTML
13 lines
10 KiB
HTML
<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">termios(2)</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">&</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> |