434 lines
29 KiB
HTML
434 lines
29 KiB
HTML
|
||
<!DOCTYPE html>
|
||
|
||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||
<head>
|
||
<meta charset="utf-8" />
|
||
<title>Python on Windows FAQ — Python 3.7.4 documentation</title>
|
||
<link rel="stylesheet" href="../_static/pydoctheme.css" type="text/css" />
|
||
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
|
||
|
||
<script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
|
||
<script type="text/javascript" src="../_static/jquery.js"></script>
|
||
<script type="text/javascript" src="../_static/underscore.js"></script>
|
||
<script type="text/javascript" src="../_static/doctools.js"></script>
|
||
<script type="text/javascript" src="../_static/language_data.js"></script>
|
||
|
||
<script type="text/javascript" src="../_static/sidebar.js"></script>
|
||
|
||
<link rel="search" type="application/opensearchdescription+xml"
|
||
title="Search within Python 3.7.4 documentation"
|
||
href="../_static/opensearch.xml"/>
|
||
<link rel="author" title="About these documents" href="../about.html" />
|
||
<link rel="index" title="Index" href="../genindex.html" />
|
||
<link rel="search" title="Search" href="../search.html" />
|
||
<link rel="copyright" title="Copyright" href="../copyright.html" />
|
||
<link rel="next" title="Graphic User Interface FAQ" href="gui.html" />
|
||
<link rel="prev" title="Extending/Embedding FAQ" href="extending.html" />
|
||
<link rel="shortcut icon" type="image/png" href="../_static/py.png" />
|
||
<link rel="canonical" href="https://docs.python.org/3/faq/windows.html" />
|
||
|
||
<script type="text/javascript" src="../_static/copybutton.js"></script>
|
||
<script type="text/javascript" src="../_static/switchers.js"></script>
|
||
|
||
|
||
|
||
<style>
|
||
@media only screen {
|
||
table.full-width-table {
|
||
width: 100%;
|
||
}
|
||
}
|
||
</style>
|
||
|
||
|
||
</head><body>
|
||
|
||
<div class="related" role="navigation" aria-label="related navigation">
|
||
<h3>Navigation</h3>
|
||
<ul>
|
||
<li class="right" style="margin-right: 10px">
|
||
<a href="../genindex.html" title="General Index"
|
||
accesskey="I">index</a></li>
|
||
<li class="right" >
|
||
<a href="../py-modindex.html" title="Python Module Index"
|
||
>modules</a> |</li>
|
||
<li class="right" >
|
||
<a href="gui.html" title="Graphic User Interface FAQ"
|
||
accesskey="N">next</a> |</li>
|
||
<li class="right" >
|
||
<a href="extending.html" title="Extending/Embedding FAQ"
|
||
accesskey="P">previous</a> |</li>
|
||
<li><img src="../_static/py.png" alt=""
|
||
style="vertical-align: middle; margin-top: -1px"/></li>
|
||
<li><a href="https://www.python.org/">Python</a> »</li>
|
||
<li>
|
||
<span class="language_switcher_placeholder">en</span>
|
||
<span class="version_switcher_placeholder">3.7.4</span>
|
||
<a href="../index.html">Documentation </a> »
|
||
</li>
|
||
|
||
<li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Python Frequently Asked Questions</a> »</li>
|
||
<li class="right">
|
||
|
||
|
||
<div class="inline-search" style="display: none" role="search">
|
||
<form class="inline-search" action="../search.html" method="get">
|
||
<input placeholder="Quick search" type="text" name="q" />
|
||
<input type="submit" value="Go" />
|
||
<input type="hidden" name="check_keywords" value="yes" />
|
||
<input type="hidden" name="area" value="default" />
|
||
</form>
|
||
</div>
|
||
<script type="text/javascript">$('.inline-search').show(0);</script>
|
||
|
|
||
</li>
|
||
|
||
</ul>
|
||
</div>
|
||
|
||
<div class="document">
|
||
<div class="documentwrapper">
|
||
<div class="bodywrapper">
|
||
<div class="body" role="main">
|
||
|
||
<div class="section" id="python-on-windows-faq">
|
||
<span id="windows-faq"></span><h1><a class="toc-backref" href="#id1">Python on Windows FAQ</a><a class="headerlink" href="#python-on-windows-faq" title="Permalink to this headline">¶</a></h1>
|
||
<div class="contents topic" id="contents">
|
||
<p class="topic-title first">Contents</p>
|
||
<ul class="simple">
|
||
<li><p><a class="reference internal" href="#python-on-windows-faq" id="id1">Python on Windows FAQ</a></p>
|
||
<ul>
|
||
<li><p><a class="reference internal" href="#how-do-i-run-a-python-program-under-windows" id="id2">How do I run a Python program under Windows?</a></p></li>
|
||
<li><p><a class="reference internal" href="#how-do-i-make-python-scripts-executable" id="id3">How do I make Python scripts executable?</a></p></li>
|
||
<li><p><a class="reference internal" href="#why-does-python-sometimes-take-so-long-to-start" id="id4">Why does Python sometimes take so long to start?</a></p></li>
|
||
<li><p><a class="reference internal" href="#how-do-i-make-an-executable-from-a-python-script" id="id5">How do I make an executable from a Python script?</a></p></li>
|
||
<li><p><a class="reference internal" href="#is-a-pyd-file-the-same-as-a-dll" id="id6">Is a <code class="docutils literal notranslate"><span class="pre">*.pyd</span></code> file the same as a DLL?</a></p></li>
|
||
<li><p><a class="reference internal" href="#how-can-i-embed-python-into-a-windows-application" id="id7">How can I embed Python into a Windows application?</a></p></li>
|
||
<li><p><a class="reference internal" href="#how-do-i-keep-editors-from-inserting-tabs-into-my-python-source" id="id8">How do I keep editors from inserting tabs into my Python source?</a></p></li>
|
||
<li><p><a class="reference internal" href="#how-do-i-check-for-a-keypress-without-blocking" id="id9">How do I check for a keypress without blocking?</a></p></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div class="section" id="how-do-i-run-a-python-program-under-windows">
|
||
<span id="faq-run-program-under-windows"></span><h2><a class="toc-backref" href="#id2">How do I run a Python program under Windows?</a><a class="headerlink" href="#how-do-i-run-a-python-program-under-windows" title="Permalink to this headline">¶</a></h2>
|
||
<p>This is not necessarily a straightforward question. If you are already familiar
|
||
with running programs from the Windows command line then everything will seem
|
||
obvious; otherwise, you might need a little more guidance.</p>
|
||
<p>Unless you use some sort of integrated development environment, you will end up
|
||
<em>typing</em> Windows commands into what is variously referred to as a “DOS window”
|
||
or “Command prompt window”. Usually you can create such a window from your
|
||
search bar by searching for <code class="docutils literal notranslate"><span class="pre">cmd</span></code>. You should be able to recognize
|
||
when you have started such a window because you will see a Windows “command
|
||
prompt”, which usually looks like this:</p>
|
||
<div class="highlight-doscon notranslate"><div class="highlight"><pre><span></span><span class="gp">C:\></span>
|
||
</pre></div>
|
||
</div>
|
||
<p>The letter may be different, and there might be other things after it, so you
|
||
might just as easily see something like:</p>
|
||
<div class="highlight-doscon notranslate"><div class="highlight"><pre><span></span><span class="gp">D:\YourName\Projects\Python></span>
|
||
</pre></div>
|
||
</div>
|
||
<p>depending on how your computer has been set up and what else you have recently
|
||
done with it. Once you have started such a window, you are well on the way to
|
||
running Python programs.</p>
|
||
<p>You need to realize that your Python scripts have to be processed by another
|
||
program called the Python <em>interpreter</em>. The interpreter reads your script,
|
||
compiles it into bytecodes, and then executes the bytecodes to run your
|
||
program. So, how do you arrange for the interpreter to handle your Python?</p>
|
||
<p>First, you need to make sure that your command window recognises the word
|
||
“py” as an instruction to start the interpreter. If you have opened a
|
||
command window, you should try entering the command <code class="docutils literal notranslate"><span class="pre">py</span></code> and hitting
|
||
return:</p>
|
||
<div class="highlight-doscon notranslate"><div class="highlight"><pre><span></span><span class="gp">C:\Users\YourName></span> py
|
||
</pre></div>
|
||
</div>
|
||
<p>You should then see something like:</p>
|
||
<div class="highlight-pycon notranslate"><div class="highlight"><pre><span></span><span class="go">Python 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:04:45) [MSC v.1900 32 bit (Intel)] on win32</span>
|
||
<span class="go">Type "help", "copyright", "credits" or "license" for more information.</span>
|
||
<span class="go">>>></span>
|
||
</pre></div>
|
||
</div>
|
||
<p>You have started the interpreter in “interactive mode”. That means you can enter
|
||
Python statements or expressions interactively and have them executed or
|
||
evaluated while you wait. This is one of Python’s strongest features. Check it
|
||
by entering a few expressions of your choice and seeing the results:</p>
|
||
<div class="highlight-pycon notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="k">print</span><span class="p">(</span><span class="s2">"Hello"</span><span class="p">)</span>
|
||
<span class="go">Hello</span>
|
||
<span class="gp">>>> </span><span class="s2">"Hello"</span> <span class="o">*</span> <span class="mi">3</span>
|
||
<span class="go">'HelloHelloHello'</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>Many people use the interactive mode as a convenient yet highly programmable
|
||
calculator. When you want to end your interactive Python session,
|
||
call the <a class="reference internal" href="../library/constants.html#exit" title="exit"><code class="xref py py-func docutils literal notranslate"><span class="pre">exit()</span></code></a> function or hold the <kbd class="kbd docutils literal notranslate">Ctrl</kbd> key down
|
||
while you enter a <kbd class="kbd docutils literal notranslate">Z</kbd>, then hit the “<kbd class="kbd docutils literal notranslate">Enter</kbd>” key to get
|
||
back to your Windows command prompt.</p>
|
||
<p>You may also find that you have a Start-menu entry such as <span class="menuselection">Start
|
||
‣ Programs ‣ Python 3.x ‣ Python (command line)</span> that results in you
|
||
seeing the <code class="docutils literal notranslate"><span class="pre">>>></span></code> prompt in a new window. If so, the window will disappear
|
||
after you call the <a class="reference internal" href="../library/constants.html#exit" title="exit"><code class="xref py py-func docutils literal notranslate"><span class="pre">exit()</span></code></a> function or enter the <kbd class="kbd docutils literal notranslate">Ctrl-Z</kbd>
|
||
character; Windows is running a single “python”
|
||
command in the window, and closes it when you terminate the interpreter.</p>
|
||
<p>Now that we know the <code class="docutils literal notranslate"><span class="pre">py</span></code> command is recognized, you can give your
|
||
Python script to it. You’ll have to give either an absolute or a
|
||
relative path to the Python script. Let’s say your Python script is
|
||
located in your desktop and is named <code class="docutils literal notranslate"><span class="pre">hello.py</span></code>, and your command
|
||
prompt is nicely opened in your home directory so you’re seeing something
|
||
similar to:</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>C:\Users\YourName>
|
||
</pre></div>
|
||
</div>
|
||
<p>So now you’ll ask the <code class="docutils literal notranslate"><span class="pre">py</span></code> command to give your script to Python by
|
||
typing <code class="docutils literal notranslate"><span class="pre">py</span></code> followed by your script path:</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>C:\Users\YourName> py Desktop\hello.py
|
||
hello
|
||
</pre></div>
|
||
</div>
|
||
</div>
|
||
<div class="section" id="how-do-i-make-python-scripts-executable">
|
||
<h2><a class="toc-backref" href="#id3">How do I make Python scripts executable?</a><a class="headerlink" href="#how-do-i-make-python-scripts-executable" title="Permalink to this headline">¶</a></h2>
|
||
<p>On Windows, the standard Python installer already associates the .py
|
||
extension with a file type (Python.File) and gives that file type an open
|
||
command that runs the interpreter (<code class="docutils literal notranslate"><span class="pre">D:\Program</span> <span class="pre">Files\Python\python.exe</span> <span class="pre">"%1"</span>
|
||
<span class="pre">%*</span></code>). This is enough to make scripts executable from the command prompt as
|
||
‘foo.py’. If you’d rather be able to execute the script by simple typing ‘foo’
|
||
with no extension you need to add .py to the PATHEXT environment variable.</p>
|
||
</div>
|
||
<div class="section" id="why-does-python-sometimes-take-so-long-to-start">
|
||
<h2><a class="toc-backref" href="#id4">Why does Python sometimes take so long to start?</a><a class="headerlink" href="#why-does-python-sometimes-take-so-long-to-start" title="Permalink to this headline">¶</a></h2>
|
||
<p>Usually Python starts very quickly on Windows, but occasionally there are bug
|
||
reports that Python suddenly begins to take a long time to start up. This is
|
||
made even more puzzling because Python will work fine on other Windows systems
|
||
which appear to be configured identically.</p>
|
||
<p>The problem may be caused by a misconfiguration of virus checking software on
|
||
the problem machine. Some virus scanners have been known to introduce startup
|
||
overhead of two orders of magnitude when the scanner is configured to monitor
|
||
all reads from the filesystem. Try checking the configuration of virus scanning
|
||
software on your systems to ensure that they are indeed configured identically.
|
||
McAfee, when configured to scan all file system read activity, is a particular
|
||
offender.</p>
|
||
</div>
|
||
<div class="section" id="how-do-i-make-an-executable-from-a-python-script">
|
||
<h2><a class="toc-backref" href="#id5">How do I make an executable from a Python script?</a><a class="headerlink" href="#how-do-i-make-an-executable-from-a-python-script" title="Permalink to this headline">¶</a></h2>
|
||
<p>See <a class="reference external" href="https://anthony-tuininga.github.io/cx_Freeze/">cx_Freeze</a> for a distutils extension
|
||
that allows you to create console and GUI executables from Python code.
|
||
<a class="reference external" href="http://www.py2exe.org/">py2exe</a>, the most popular extension for building
|
||
Python 2.x-based executables, does not yet support Python 3 but a version that
|
||
does is in development.</p>
|
||
</div>
|
||
<div class="section" id="is-a-pyd-file-the-same-as-a-dll">
|
||
<h2><a class="toc-backref" href="#id6">Is a <code class="docutils literal notranslate"><span class="pre">*.pyd</span></code> file the same as a DLL?</a><a class="headerlink" href="#is-a-pyd-file-the-same-as-a-dll" title="Permalink to this headline">¶</a></h2>
|
||
<p>Yes, .pyd files are dll’s, but there are a few differences. If you have a DLL
|
||
named <code class="docutils literal notranslate"><span class="pre">foo.pyd</span></code>, then it must have a function <code class="docutils literal notranslate"><span class="pre">PyInit_foo()</span></code>. You can then
|
||
write Python “import foo”, and Python will search for foo.pyd (as well as
|
||
foo.py, foo.pyc) and if it finds it, will attempt to call <code class="docutils literal notranslate"><span class="pre">PyInit_foo()</span></code> to
|
||
initialize it. You do not link your .exe with foo.lib, as that would cause
|
||
Windows to require the DLL to be present.</p>
|
||
<p>Note that the search path for foo.pyd is PYTHONPATH, not the same as the path
|
||
that Windows uses to search for foo.dll. Also, foo.pyd need not be present to
|
||
run your program, whereas if you linked your program with a dll, the dll is
|
||
required. Of course, foo.pyd is required if you want to say <code class="docutils literal notranslate"><span class="pre">import</span> <span class="pre">foo</span></code>. In
|
||
a DLL, linkage is declared in the source code with <code class="docutils literal notranslate"><span class="pre">__declspec(dllexport)</span></code>.
|
||
In a .pyd, linkage is defined in a list of available functions.</p>
|
||
</div>
|
||
<div class="section" id="how-can-i-embed-python-into-a-windows-application">
|
||
<h2><a class="toc-backref" href="#id7">How can I embed Python into a Windows application?</a><a class="headerlink" href="#how-can-i-embed-python-into-a-windows-application" title="Permalink to this headline">¶</a></h2>
|
||
<p>Embedding the Python interpreter in a Windows app can be summarized as follows:</p>
|
||
<ol class="arabic">
|
||
<li><p>Do _not_ build Python into your .exe file directly. On Windows, Python must
|
||
be a DLL to handle importing modules that are themselves DLL’s. (This is the
|
||
first key undocumented fact.) Instead, link to <code class="file docutils literal notranslate"><span class="pre">python</span><em><span class="pre">NN</span></em><span class="pre">.dll</span></code>; it is
|
||
typically installed in <code class="docutils literal notranslate"><span class="pre">C:\Windows\System</span></code>. <em>NN</em> is the Python version, a
|
||
number such as “33” for Python 3.3.</p>
|
||
<p>You can link to Python in two different ways. Load-time linking means
|
||
linking against <code class="file docutils literal notranslate"><span class="pre">python</span><em><span class="pre">NN</span></em><span class="pre">.lib</span></code>, while run-time linking means linking
|
||
against <code class="file docutils literal notranslate"><span class="pre">python</span><em><span class="pre">NN</span></em><span class="pre">.dll</span></code>. (General note: <code class="file docutils literal notranslate"><span class="pre">python</span><em><span class="pre">NN</span></em><span class="pre">.lib</span></code> is the
|
||
so-called “import lib” corresponding to <code class="file docutils literal notranslate"><span class="pre">python</span><em><span class="pre">NN</span></em><span class="pre">.dll</span></code>. It merely
|
||
defines symbols for the linker.)</p>
|
||
<p>Run-time linking greatly simplifies link options; everything happens at run
|
||
time. Your code must load <code class="file docutils literal notranslate"><span class="pre">python</span><em><span class="pre">NN</span></em><span class="pre">.dll</span></code> using the Windows
|
||
<code class="docutils literal notranslate"><span class="pre">LoadLibraryEx()</span></code> routine. The code must also use access routines and data
|
||
in <code class="file docutils literal notranslate"><span class="pre">python</span><em><span class="pre">NN</span></em><span class="pre">.dll</span></code> (that is, Python’s C API’s) using pointers obtained
|
||
by the Windows <code class="docutils literal notranslate"><span class="pre">GetProcAddress()</span></code> routine. Macros can make using these
|
||
pointers transparent to any C code that calls routines in Python’s C API.</p>
|
||
<p>Borland note: convert <code class="file docutils literal notranslate"><span class="pre">python</span><em><span class="pre">NN</span></em><span class="pre">.lib</span></code> to OMF format using Coff2Omf.exe
|
||
first.</p>
|
||
</li>
|
||
<li><p>If you use SWIG, it is easy to create a Python “extension module” that will
|
||
make the app’s data and methods available to Python. SWIG will handle just
|
||
about all the grungy details for you. The result is C code that you link
|
||
<em>into</em> your .exe file (!) You do _not_ have to create a DLL file, and this
|
||
also simplifies linking.</p></li>
|
||
<li><p>SWIG will create an init function (a C function) whose name depends on the
|
||
name of the extension module. For example, if the name of the module is leo,
|
||
the init function will be called initleo(). If you use SWIG shadow classes,
|
||
as you should, the init function will be called initleoc(). This initializes
|
||
a mostly hidden helper class used by the shadow class.</p>
|
||
<p>The reason you can link the C code in step 2 into your .exe file is that
|
||
calling the initialization function is equivalent to importing the module
|
||
into Python! (This is the second key undocumented fact.)</p>
|
||
</li>
|
||
<li><p>In short, you can use the following code to initialize the Python interpreter
|
||
with your extension module.</p>
|
||
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="cp">#include</span> <span class="cpf">"python.h"</span><span class="cp"></span>
|
||
<span class="p">...</span>
|
||
<span class="n">Py_Initialize</span><span class="p">();</span> <span class="c1">// Initialize Python.</span>
|
||
<span class="n">initmyAppc</span><span class="p">();</span> <span class="c1">// Initialize (import) the helper class.</span>
|
||
<span class="n">PyRun_SimpleString</span><span class="p">(</span><span class="s">"import myApp"</span><span class="p">);</span> <span class="c1">// Import the shadow class.</span>
|
||
</pre></div>
|
||
</div>
|
||
</li>
|
||
<li><p>There are two problems with Python’s C API which will become apparent if you
|
||
use a compiler other than MSVC, the compiler used to build pythonNN.dll.</p>
|
||
<p>Problem 1: The so-called “Very High Level” functions that take FILE *
|
||
arguments will not work in a multi-compiler environment because each
|
||
compiler’s notion of a struct FILE will be different. From an implementation
|
||
standpoint these are very _low_ level functions.</p>
|
||
<p>Problem 2: SWIG generates the following code when generating wrappers to void
|
||
functions:</p>
|
||
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="n">Py_INCREF</span><span class="p">(</span><span class="n">Py_None</span><span class="p">);</span>
|
||
<span class="n">_resultobj</span> <span class="o">=</span> <span class="n">Py_None</span><span class="p">;</span>
|
||
<span class="k">return</span> <span class="n">_resultobj</span><span class="p">;</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>Alas, Py_None is a macro that expands to a reference to a complex data
|
||
structure called _Py_NoneStruct inside pythonNN.dll. Again, this code will
|
||
fail in a mult-compiler environment. Replace such code by:</p>
|
||
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="k">return</span> <span class="nf">Py_BuildValue</span><span class="p">(</span><span class="s">""</span><span class="p">);</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>It may be possible to use SWIG’s <code class="docutils literal notranslate"><span class="pre">%typemap</span></code> command to make the change
|
||
automatically, though I have not been able to get this to work (I’m a
|
||
complete SWIG newbie).</p>
|
||
</li>
|
||
<li><p>Using a Python shell script to put up a Python interpreter window from inside
|
||
your Windows app is not a good idea; the resulting window will be independent
|
||
of your app’s windowing system. Rather, you (or the wxPythonWindow class)
|
||
should create a “native” interpreter window. It is easy to connect that
|
||
window to the Python interpreter. You can redirect Python’s i/o to _any_
|
||
object that supports read and write, so all you need is a Python object
|
||
(defined in your extension module) that contains read() and write() methods.</p></li>
|
||
</ol>
|
||
</div>
|
||
<div class="section" id="how-do-i-keep-editors-from-inserting-tabs-into-my-python-source">
|
||
<h2><a class="toc-backref" href="#id8">How do I keep editors from inserting tabs into my Python source?</a><a class="headerlink" href="#how-do-i-keep-editors-from-inserting-tabs-into-my-python-source" title="Permalink to this headline">¶</a></h2>
|
||
<p>The FAQ does not recommend using tabs, and the Python style guide, <span class="target" id="index-0"></span><a class="pep reference external" href="https://www.python.org/dev/peps/pep-0008"><strong>PEP 8</strong></a>,
|
||
recommends 4 spaces for distributed Python code; this is also the Emacs
|
||
python-mode default.</p>
|
||
<p>Under any editor, mixing tabs and spaces is a bad idea. MSVC is no different in
|
||
this respect, and is easily configured to use spaces: Take <span class="menuselection">Tools
|
||
‣ Options ‣ Tabs</span>, and for file type “Default” set “Tab size” and “Indent
|
||
size” to 4, and select the “Insert spaces” radio button.</p>
|
||
<p>Python raises <a class="reference internal" href="../library/exceptions.html#IndentationError" title="IndentationError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">IndentationError</span></code></a> or <a class="reference internal" href="../library/exceptions.html#TabError" title="TabError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">TabError</span></code></a> if mixed tabs
|
||
and spaces are causing problems in leading whitespace.
|
||
You may also run the <a class="reference internal" href="../library/tabnanny.html#module-tabnanny" title="tabnanny: Tool for detecting white space related problems in Python source files in a directory tree."><code class="xref py py-mod docutils literal notranslate"><span class="pre">tabnanny</span></code></a> module to check a directory tree
|
||
in batch mode.</p>
|
||
</div>
|
||
<div class="section" id="how-do-i-check-for-a-keypress-without-blocking">
|
||
<h2><a class="toc-backref" href="#id9">How do I check for a keypress without blocking?</a><a class="headerlink" href="#how-do-i-check-for-a-keypress-without-blocking" title="Permalink to this headline">¶</a></h2>
|
||
<p>Use the msvcrt module. This is a standard Windows-specific extension module.
|
||
It defines a function <code class="docutils literal notranslate"><span class="pre">kbhit()</span></code> which checks whether a keyboard hit is
|
||
present, and <code class="docutils literal notranslate"><span class="pre">getch()</span></code> which gets one character without echoing it.</p>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
||
<div class="sphinxsidebarwrapper">
|
||
<h3><a href="../contents.html">Table of Contents</a></h3>
|
||
<ul>
|
||
<li><a class="reference internal" href="#">Python on Windows FAQ</a><ul>
|
||
<li><a class="reference internal" href="#how-do-i-run-a-python-program-under-windows">How do I run a Python program under Windows?</a></li>
|
||
<li><a class="reference internal" href="#how-do-i-make-python-scripts-executable">How do I make Python scripts executable?</a></li>
|
||
<li><a class="reference internal" href="#why-does-python-sometimes-take-so-long-to-start">Why does Python sometimes take so long to start?</a></li>
|
||
<li><a class="reference internal" href="#how-do-i-make-an-executable-from-a-python-script">How do I make an executable from a Python script?</a></li>
|
||
<li><a class="reference internal" href="#is-a-pyd-file-the-same-as-a-dll">Is a <code class="docutils literal notranslate"><span class="pre">*.pyd</span></code> file the same as a DLL?</a></li>
|
||
<li><a class="reference internal" href="#how-can-i-embed-python-into-a-windows-application">How can I embed Python into a Windows application?</a></li>
|
||
<li><a class="reference internal" href="#how-do-i-keep-editors-from-inserting-tabs-into-my-python-source">How do I keep editors from inserting tabs into my Python source?</a></li>
|
||
<li><a class="reference internal" href="#how-do-i-check-for-a-keypress-without-blocking">How do I check for a keypress without blocking?</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
|
||
<h4>Previous topic</h4>
|
||
<p class="topless"><a href="extending.html"
|
||
title="previous chapter">Extending/Embedding FAQ</a></p>
|
||
<h4>Next topic</h4>
|
||
<p class="topless"><a href="gui.html"
|
||
title="next chapter">Graphic User Interface FAQ</a></p>
|
||
<div role="note" aria-label="source link">
|
||
<h3>This Page</h3>
|
||
<ul class="this-page-menu">
|
||
<li><a href="../bugs.html">Report a Bug</a></li>
|
||
<li>
|
||
<a href="https://github.com/python/cpython/blob/3.7/Doc/faq/windows.rst"
|
||
rel="nofollow">Show Source
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="clearer"></div>
|
||
</div>
|
||
<div class="related" role="navigation" aria-label="related navigation">
|
||
<h3>Navigation</h3>
|
||
<ul>
|
||
<li class="right" style="margin-right: 10px">
|
||
<a href="../genindex.html" title="General Index"
|
||
>index</a></li>
|
||
<li class="right" >
|
||
<a href="../py-modindex.html" title="Python Module Index"
|
||
>modules</a> |</li>
|
||
<li class="right" >
|
||
<a href="gui.html" title="Graphic User Interface FAQ"
|
||
>next</a> |</li>
|
||
<li class="right" >
|
||
<a href="extending.html" title="Extending/Embedding FAQ"
|
||
>previous</a> |</li>
|
||
<li><img src="../_static/py.png" alt=""
|
||
style="vertical-align: middle; margin-top: -1px"/></li>
|
||
<li><a href="https://www.python.org/">Python</a> »</li>
|
||
<li>
|
||
<span class="language_switcher_placeholder">en</span>
|
||
<span class="version_switcher_placeholder">3.7.4</span>
|
||
<a href="../index.html">Documentation </a> »
|
||
</li>
|
||
|
||
<li class="nav-item nav-item-1"><a href="index.html" >Python Frequently Asked Questions</a> »</li>
|
||
<li class="right">
|
||
|
||
|
||
<div class="inline-search" style="display: none" role="search">
|
||
<form class="inline-search" action="../search.html" method="get">
|
||
<input placeholder="Quick search" type="text" name="q" />
|
||
<input type="submit" value="Go" />
|
||
<input type="hidden" name="check_keywords" value="yes" />
|
||
<input type="hidden" name="area" value="default" />
|
||
</form>
|
||
</div>
|
||
<script type="text/javascript">$('.inline-search').show(0);</script>
|
||
|
|
||
</li>
|
||
|
||
</ul>
|
||
</div>
|
||
<div class="footer">
|
||
© <a href="../copyright.html">Copyright</a> 2001-2019, Python Software Foundation.
|
||
<br />
|
||
The Python Software Foundation is a non-profit corporation.
|
||
<a href="https://www.python.org/psf/donations/">Please donate.</a>
|
||
<br />
|
||
Last updated on Jul 13, 2019.
|
||
<a href="../bugs.html">Found a bug</a>?
|
||
<br />
|
||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 2.0.1.
|
||
</div>
|
||
|
||
</body>
|
||
</html> |