mirror of https://github.com/python/cpython
Merged revisions 76847,76851,76869,76882,76891-76892,76924,77007,77070,77092,77096,77120,77126,77155 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk ........ r76847 | benjamin.peterson | 2009-12-14 21:25:27 -0600 (Mon, 14 Dec 2009) | 1 line adverb ........ r76851 | benjamin.peterson | 2009-12-15 21:28:52 -0600 (Tue, 15 Dec 2009) | 1 line remove lib2to3 resource ........ r76869 | vinay.sajip | 2009-12-17 08:52:00 -0600 (Thu, 17 Dec 2009) | 1 line Issue #7529: logging: Minor correction to documentation. ........ r76882 | georg.brandl | 2009-12-19 11:30:28 -0600 (Sat, 19 Dec 2009) | 1 line #7527: use standard versionadded tags. ........ r76891 | georg.brandl | 2009-12-19 12:16:31 -0600 (Sat, 19 Dec 2009) | 1 line #7479: add note about function availability on Unices. ........ r76892 | georg.brandl | 2009-12-19 12:20:18 -0600 (Sat, 19 Dec 2009) | 1 line #7480: remove tautology. ........ r76924 | georg.brandl | 2009-12-20 08:28:05 -0600 (Sun, 20 Dec 2009) | 1 line Small indentation fix. ........ r77007 | gregory.p.smith | 2009-12-23 03:31:11 -0600 (Wed, 23 Dec 2009) | 3 lines Fix possible integer overflow in lchown and fchown functions. For issue1747858. ........ r77070 | amaury.forgeotdarc | 2009-12-27 14:06:44 -0600 (Sun, 27 Dec 2009) | 2 lines Fix a typo in comment ........ r77092 | georg.brandl | 2009-12-28 02:48:24 -0600 (Mon, 28 Dec 2009) | 1 line #7404: remove reference to non-existing example files. ........ r77096 | benjamin.peterson | 2009-12-28 14:51:17 -0600 (Mon, 28 Dec 2009) | 1 line document new fix_callable behavior ........ r77120 | georg.brandl | 2009-12-29 15:09:17 -0600 (Tue, 29 Dec 2009) | 1 line #7595: fix typo in argument default constant. ........ r77126 | amaury.forgeotdarc | 2009-12-29 17:06:17 -0600 (Tue, 29 Dec 2009) | 2 lines #7579: Add docstrings to the msvcrt module ........ r77155 | georg.brandl | 2009-12-30 13:03:00 -0600 (Wed, 30 Dec 2009) | 1 line We only support Windows NT derivatives now. ........
This commit is contained in:
parent
2591d21deb
commit
1baf465d27
|
@ -810,7 +810,7 @@ on the entrance and exit from the block. Some language have a construct that
|
|||
looks like this::
|
||||
|
||||
with obj:
|
||||
a = 1 # equivalent to obj.a = 1
|
||||
a = 1 # equivalent to obj.a = 1
|
||||
total = total + 1 # obj.total = obj.total + 1
|
||||
|
||||
In Python, such a construct would be ambiguous.
|
||||
|
|
|
@ -122,7 +122,8 @@ and off individually. They are described here in more detail.
|
|||
|
||||
.. 2to3fixer:: callable
|
||||
|
||||
Converts ``callable(x)`` to ``hasattr(x, "__call_")``.
|
||||
Converts ``callable(x)`` to ``isinstance(x, collections.Callable)``, adding
|
||||
an import to :mod:`collections` if needed.
|
||||
|
||||
.. 2to3fixer:: dict
|
||||
|
||||
|
|
|
@ -1005,7 +1005,7 @@ Here is what we get on Windows::
|
|||
>>>
|
||||
|
||||
It is funny to see that on linux the sort function seems to work much more
|
||||
efficient, it is doing less comparisons::
|
||||
efficiently, it is doing less comparisons::
|
||||
|
||||
>>> qsort(ia, len(ia), sizeof(c_int), cmp_func) # doctest: +LINUX
|
||||
py_cmp_func 5 1
|
||||
|
|
|
@ -1659,6 +1659,8 @@ file-like object (or, more precisely, any object which supports :meth:`write`
|
|||
and :meth:`flush` methods).
|
||||
|
||||
|
||||
.. currentmodule:: logging
|
||||
|
||||
.. class:: StreamHandler(stream=None)
|
||||
|
||||
Returns a new instance of the :class:`StreamHandler` class. If *stream* is
|
||||
|
|
|
@ -144,6 +144,4 @@ Other Functions
|
|||
.. function:: heapmin()
|
||||
|
||||
Force the :cfunc:`malloc` heap to clean itself up and return unused blocks to
|
||||
the operating system. This only works on Windows NT. On failure, this raises
|
||||
:exc:`IOError`.
|
||||
|
||||
the operating system. On failure, this raises :exc:`IOError`.
|
||||
|
|
|
@ -153,9 +153,7 @@ required option
|
|||
an option that must be supplied on the command-line; note that the phrase
|
||||
"required option" is self-contradictory in English. :mod:`optparse` doesn't
|
||||
prevent you from implementing required options, but doesn't give you much
|
||||
help at it either. See ``examples/required_1.py`` and
|
||||
``examples/required_2.py`` in the :mod:`optparse` source distribution for two
|
||||
ways to implement required options with :mod:`optparse`.
|
||||
help at it either.
|
||||
|
||||
For example, consider this hypothetical command-line::
|
||||
|
||||
|
|
|
@ -13,26 +13,34 @@ module. For creating temporary files and directories see the :mod:`tempfile`
|
|||
module, and for high-level file and directory handling see the :mod:`shutil`
|
||||
module.
|
||||
|
||||
The design of all built-in operating system dependent modules of Python is such
|
||||
that as long as the same functionality is available, it uses the same interface;
|
||||
for example, the function ``os.stat(path)`` returns stat information about
|
||||
*path* in the same format (which happens to have originated with the POSIX
|
||||
interface).
|
||||
Notes on the availability of these functions:
|
||||
|
||||
Extensions peculiar to a particular operating system are also available through
|
||||
the :mod:`os` module, but using them is of course a threat to portability!
|
||||
* The design of all built-in operating system dependent modules of Python is
|
||||
such that as long as the same functionality is available, it uses the same
|
||||
interface; for example, the function ``os.stat(path)`` returns stat
|
||||
information about *path* in the same format (which happens to have originated
|
||||
with the POSIX interface).
|
||||
|
||||
.. note::
|
||||
* Extensions peculiar to a particular operating system are also available
|
||||
through the :mod:`os` module, but using them is of course a threat to
|
||||
portability.
|
||||
|
||||
All functions accepting path or file names accept both bytes and string
|
||||
objects, and result in an object of the same type, if a path or file name is
|
||||
returned.
|
||||
* All functions accepting path or file names accept both bytes and string
|
||||
objects, and result in an object of the same type, if a path or file name is
|
||||
returned.
|
||||
|
||||
.. note::
|
||||
|
||||
If not separately noted, all functions that claim "Availability: Unix" are
|
||||
supported on Mac OS X, which builds on a Unix core.
|
||||
|
||||
* An "Availability: Unix" note means that this function is commonly found on
|
||||
Unix systems. It does not make any claims about its existence on a specific
|
||||
operating system.
|
||||
|
||||
* If not separately noted, all functions that claim "Availability: Unix" are
|
||||
supported on Mac OS X, which builds on a Unix core.
|
||||
|
||||
.. note::
|
||||
|
||||
All functions in this module raise :exc:`OSError` in the case of invalid or
|
||||
|
@ -46,9 +54,9 @@ the :mod:`os` module, but using them is of course a threat to portability!
|
|||
|
||||
.. data:: name
|
||||
|
||||
The name of the operating system dependent module imported. The following names
|
||||
have currently been registered: ``'posix'``, ``'nt'``, ``'mac'``, ``'os2'``,
|
||||
``'ce'``, ``'java'``.
|
||||
The name of the operating system dependent module imported. The following
|
||||
names have currently been registered: ``'posix'``, ``'nt'``, ``'mac'``,
|
||||
``'os2'``, ``'ce'``, ``'java'``.
|
||||
|
||||
|
||||
.. _os-filenames:
|
||||
|
|
|
@ -45,7 +45,7 @@ The module defines the following:
|
|||
:ref:`kqueue-objects` below for the methods supported by kqueue objects.
|
||||
|
||||
|
||||
.. function:: kevent(ident, filter=KQ_FILTER_READ, flags=KQ_ADD, fflags=0, data=0, udata=0)
|
||||
.. function:: kevent(ident, filter=KQ_FILTER_READ, flags=KQ_EV_ADD, fflags=0, data=0, udata=0)
|
||||
|
||||
(Only supported on BSD.) Returns a kernel event object object; see section
|
||||
:ref:`kevent-objects` below for the methods supported by kqueue objects.
|
||||
|
|
|
@ -2458,8 +2458,7 @@ types, where they are relevant. Some of these are not reported by the
|
|||
|
||||
.. attribute:: class.__bases__
|
||||
|
||||
The tuple of base classes of a class object. If there are no base classes, this
|
||||
will be an empty tuple.
|
||||
The tuple of base classes of a class object.
|
||||
|
||||
|
||||
.. attribute:: class.__name__
|
||||
|
|
|
@ -86,6 +86,7 @@ substitutions and value formatting via the :func:`format` method described in
|
|||
you to create and customize your own string formatting behaviors using the same
|
||||
implementation as the built-in :meth:`format` method.
|
||||
|
||||
|
||||
.. class:: Formatter
|
||||
|
||||
The :class:`Formatter` class has the following public methods:
|
||||
|
@ -470,6 +471,8 @@ The available presentation types for floating point and decimal values are:
|
|||
Template strings
|
||||
----------------
|
||||
|
||||
.. versionadded:: 2.4
|
||||
|
||||
Templates provide simpler string substitutions as described in :pep:`292`.
|
||||
Instead of the normal ``%``\ -based substitutions, Templates support ``$``\
|
||||
-based substitutions, using the following rules:
|
||||
|
|
|
@ -121,8 +121,6 @@ resources to test. Currently only the following are defined:
|
|||
curses - Tests that use curses and will modify the terminal's
|
||||
state and output modes.
|
||||
|
||||
lib2to3 - Run the tests for 2to3 (They take a while.)
|
||||
|
||||
largefile - It is okay to run some test that may create huge
|
||||
files. These tests can take a long time and may
|
||||
consume >2GB of disk space temporarily.
|
||||
|
|
|
@ -195,32 +195,54 @@ class PosixTester(unittest.TestCase):
|
|||
if hasattr(posix, 'stat'):
|
||||
self.assertTrue(posix.stat(support.TESTFN))
|
||||
|
||||
if hasattr(posix, 'chown'):
|
||||
def test_chown(self):
|
||||
# raise an OSError if the file does not exist
|
||||
os.unlink(support.TESTFN)
|
||||
self.assertRaises(OSError, posix.chown, support.TESTFN, -1, -1)
|
||||
def _test_all_chown_common(self, chown_func, first_param):
|
||||
"""Common code for chown, fchown and lchown tests."""
|
||||
if os.getuid() == 0:
|
||||
try:
|
||||
# Many linux distros have a nfsnobody user as MAX_UID-2
|
||||
# that makes a good test case for signedness issues.
|
||||
# http://bugs.python.org/issue1747858
|
||||
# This part of the test only runs when run as root.
|
||||
# Only scary people run their tests as root.
|
||||
ent = pwd.getpwnam('nfsnobody')
|
||||
chown_func(first_param, ent.pw_uid, ent.pw_gid)
|
||||
except KeyError:
|
||||
pass
|
||||
else:
|
||||
# non-root cannot chown to root, raises OSError
|
||||
self.assertRaises(OSError, chown_func,
|
||||
first_param, 0, 0)
|
||||
# test a successful chown call
|
||||
chown_func(first_param, os.getuid(), os.getgid())
|
||||
|
||||
# re-create the file
|
||||
open(support.TESTFN, 'w').close()
|
||||
if os.getuid() == 0:
|
||||
try:
|
||||
# Many linux distros have a nfsnobody user as MAX_UID-2
|
||||
# that makes a good test case for signedness issues.
|
||||
# http://bugs.python.org/issue1747858
|
||||
# This part of the test only runs when run as root.
|
||||
# Only scary people run their tests as root.
|
||||
ent = pwd.getpwnam('nfsnobody')
|
||||
posix.chown(support.TESTFN, ent.pw_uid, ent.pw_gid)
|
||||
except KeyError:
|
||||
pass
|
||||
else:
|
||||
# non-root cannot chown to root, raises OSError
|
||||
self.assertRaises(OSError, posix.chown,
|
||||
support.TESTFN, 0, 0)
|
||||
@unittest.skipUnless(hasattr(posix, 'chown'), "test needs os.chown()")
|
||||
def test_chown(self):
|
||||
# raise an OSError if the file does not exist
|
||||
os.unlink(support.TESTFN)
|
||||
self.assertRaises(OSError, posix.chown, support.TESTFN, -1, -1)
|
||||
|
||||
# test a successful chown call
|
||||
posix.chown(support.TESTFN, os.getuid(), os.getgid())
|
||||
# re-create the file
|
||||
open(support.TESTFN, 'w').close()
|
||||
self._test_all_chown_common(posix.chown, support.TESTFN)
|
||||
|
||||
@unittest.skipUnless(hasattr(posix, 'fchown'), "test needs os.fchown()")
|
||||
def test_fchown(self):
|
||||
os.unlink(support.TESTFN)
|
||||
|
||||
# re-create the file
|
||||
test_file = open(support.TESTFN, 'w')
|
||||
try:
|
||||
fd = test_file.fileno()
|
||||
self._test_all_chown_common(posix.fchown, fd)
|
||||
finally:
|
||||
test_file.close()
|
||||
|
||||
@unittest.skipUnless(hasattr(posix, 'lchown'), "test needs os.lchown()")
|
||||
def test_lchown(self):
|
||||
os.unlink(support.TESTFN)
|
||||
# create a symlink
|
||||
os.symlink('/tmp/dummy-symlink-target', support.TESTFN)
|
||||
self._test_all_chown_common(posix.lchown, support.TESTFN)
|
||||
|
||||
def test_chdir(self):
|
||||
if hasattr(posix, 'chdir'):
|
||||
|
|
|
@ -927,7 +927,7 @@ collect(int generation)
|
|||
*/
|
||||
(void)handle_finalizers(&finalizers, old);
|
||||
|
||||
/* Clear free list only during the collection of the higest
|
||||
/* Clear free list only during the collection of the highest
|
||||
* generation */
|
||||
if (generation == NUM_GENERATIONS-1) {
|
||||
clear_freelists();
|
||||
|
@ -948,7 +948,7 @@ collect_generations(void)
|
|||
int i;
|
||||
Py_ssize_t n = 0;
|
||||
|
||||
/* Find the oldest generation (higest numbered) where the count
|
||||
/* Find the oldest generation (highest numbered) where the count
|
||||
* exceeds the threshold. Objects in the that generation and
|
||||
* generations younger than it will be collected. */
|
||||
for (i = NUM_GENERATIONS-1; i >= 0; i--) {
|
||||
|
|
|
@ -1988,9 +1988,10 @@ fd to the numeric uid and gid.");
|
|||
static PyObject *
|
||||
posix_fchown(PyObject *self, PyObject *args)
|
||||
{
|
||||
int fd, uid, gid;
|
||||
int fd;
|
||||
long uid, gid;
|
||||
int res;
|
||||
if (!PyArg_ParseTuple(args, "iii:chown", &fd, &uid, &gid))
|
||||
if (!PyArg_ParseTuple(args, "ill:chown", &fd, &uid, &gid))
|
||||
return NULL;
|
||||
Py_BEGIN_ALLOW_THREADS
|
||||
res = fchown(fd, (uid_t) uid, (gid_t) gid);
|
||||
|
@ -2012,9 +2013,9 @@ posix_lchown(PyObject *self, PyObject *args)
|
|||
{
|
||||
PyObject *opath;
|
||||
char *path;
|
||||
int uid, gid;
|
||||
long uid, gid;
|
||||
int res;
|
||||
if (!PyArg_ParseTuple(args, "O&ii:lchown",
|
||||
if (!PyArg_ParseTuple(args, "O&ll:lchown",
|
||||
PyUnicode_FSConverter, &opath,
|
||||
&uid, &gid))
|
||||
return NULL;
|
||||
|
|
|
@ -1166,7 +1166,7 @@ static PyTypeObject pyEpoll_Type = {
|
|||
#endif
|
||||
|
||||
PyDoc_STRVAR(kqueue_event_doc,
|
||||
"kevent(ident, filter=KQ_FILTER_READ, flags=KQ_ADD, fflags=0, data=0, udata=0)\n\
|
||||
"kevent(ident, filter=KQ_FILTER_READ, flags=KQ_EV_ADD, fflags=0, data=0, udata=0)\n\
|
||||
\n\
|
||||
This object is the equivalent of the struct kevent for the C API.\n\
|
||||
\n\
|
||||
|
|
|
@ -45,6 +45,12 @@ msvcrt_heapmin(PyObject *self, PyObject *args)
|
|||
return Py_None;
|
||||
}
|
||||
|
||||
PyDoc_STRVAR(heapmin_doc,
|
||||
"heapmin() -> None\n\
|
||||
\n\
|
||||
Force the malloc() heap to clean itself up and return unused blocks\n\
|
||||
to the operating system. On failure, this raises IOError.");
|
||||
|
||||
// Perform locking operations on a C runtime file descriptor.
|
||||
static PyObject *
|
||||
msvcrt_locking(PyObject *self, PyObject *args)
|
||||
|
@ -67,6 +73,17 @@ msvcrt_locking(PyObject *self, PyObject *args)
|
|||
return Py_None;
|
||||
}
|
||||
|
||||
PyDoc_STRVAR(locking_doc,
|
||||
"locking(fd, mode, nbytes) -> None\n\
|
||||
\n\
|
||||
Lock part of a file based on file descriptor fd from the C runtime.\n\
|
||||
Raises IOError on failure. The locked region of the file extends from\n\
|
||||
the current file position for nbytes bytes, and may continue beyond\n\
|
||||
the end of the file. mode must be one of the LK_* constants listed\n\
|
||||
below. Multiple regions in a file may be locked at the same time, but\n\
|
||||
may not overlap. Adjacent regions are not merged; they must be unlocked\n\
|
||||
individually.");
|
||||
|
||||
// Set the file translation mode for a C runtime file descriptor.
|
||||
static PyObject *
|
||||
msvcrt_setmode(PyObject *self, PyObject *args)
|
||||
|
@ -83,6 +100,13 @@ msvcrt_setmode(PyObject *self, PyObject *args)
|
|||
return PyLong_FromLong(flags);
|
||||
}
|
||||
|
||||
PyDoc_STRVAR(setmode_doc,
|
||||
"setmode(fd, mode) -> Previous mode\n\
|
||||
\n\
|
||||
Set the line-end translation mode for the file descriptor fd. To set\n\
|
||||
it to text mode, flags should be os.O_TEXT; for binary, it should be\n\
|
||||
os.O_BINARY.");
|
||||
|
||||
// Convert an OS file handle to a C runtime file descriptor.
|
||||
static PyObject *
|
||||
msvcrt_open_osfhandle(PyObject *self, PyObject *args)
|
||||
|
@ -101,6 +125,14 @@ msvcrt_open_osfhandle(PyObject *self, PyObject *args)
|
|||
return PyLong_FromLong(fd);
|
||||
}
|
||||
|
||||
PyDoc_STRVAR(open_osfhandle_doc,
|
||||
"open_osfhandle(handle, flags) -> file descriptor\n\
|
||||
\n\
|
||||
Create a C runtime file descriptor from the file handle handle. The\n\
|
||||
flags parameter should be a bitwise OR of os.O_APPEND, os.O_RDONLY,\n\
|
||||
and os.O_TEXT. The returned file descriptor may be used as a parameter\n\
|
||||
to os.fdopen() to create a file object.");
|
||||
|
||||
// Convert a C runtime file descriptor to an OS file handle.
|
||||
static PyObject *
|
||||
msvcrt_get_osfhandle(PyObject *self, PyObject *args)
|
||||
|
@ -121,6 +153,12 @@ msvcrt_get_osfhandle(PyObject *self, PyObject *args)
|
|||
return PyLong_FromVoidPtr((void*)handle);
|
||||
}
|
||||
|
||||
PyDoc_STRVAR(get_osfhandle_doc,
|
||||
"get_osfhandle(fd) -> file handle\n\
|
||||
\n\
|
||||
Return the file handle for the file descriptor fd. Raises IOError\n\
|
||||
if fd is not recognized.");
|
||||
|
||||
/* Console I/O */
|
||||
|
||||
static PyObject *
|
||||
|
@ -135,6 +173,11 @@ msvcrt_kbhit(PyObject *self, PyObject *args)
|
|||
return PyLong_FromLong(ok);
|
||||
}
|
||||
|
||||
PyDoc_STRVAR(kbhit_doc,
|
||||
"kbhit() -> bool\n\
|
||||
\n\
|
||||
Return true if a keypress is waiting to be read.");
|
||||
|
||||
static PyObject *
|
||||
msvcrt_getch(PyObject *self, PyObject *args)
|
||||
{
|
||||
|
@ -151,6 +194,16 @@ msvcrt_getch(PyObject *self, PyObject *args)
|
|||
return PyBytes_FromStringAndSize(s, 1);
|
||||
}
|
||||
|
||||
PyDoc_STRVAR(getch_doc,
|
||||
"getch() -> key character\n\
|
||||
\n\
|
||||
Read a keypress and return the resulting character. Nothing is echoed to\n\
|
||||
the console. This call will block if a keypress is not already\n\
|
||||
available, but will not wait for Enter to be pressed. If the pressed key\n\
|
||||
was a special function key, this will return '\\000' or '\\xe0'; the next\n\
|
||||
call will return the keycode. The Control-C keypress cannot be read with\n\
|
||||
this function.");
|
||||
|
||||
#ifdef _WCONIO_DEFINED
|
||||
static PyObject *
|
||||
msvcrt_getwch(PyObject *self, PyObject *args)
|
||||
|
@ -167,6 +220,11 @@ msvcrt_getwch(PyObject *self, PyObject *args)
|
|||
u[0] = ch;
|
||||
return PyUnicode_FromUnicode(u, 1);
|
||||
}
|
||||
|
||||
PyDoc_STRVAR(getwch_doc,
|
||||
"getwch() -> Unicode key character\n\
|
||||
\n\
|
||||
Wide char variant of getch(), returning a Unicode value.");
|
||||
#endif
|
||||
|
||||
static PyObject *
|
||||
|
@ -185,6 +243,12 @@ msvcrt_getche(PyObject *self, PyObject *args)
|
|||
return PyBytes_FromStringAndSize(s, 1);
|
||||
}
|
||||
|
||||
PyDoc_STRVAR(getche_doc,
|
||||
"getche() -> key character\n\
|
||||
\n\
|
||||
Similar to getch(), but the keypress will be echoed if it represents\n\
|
||||
a printable character.");
|
||||
|
||||
#ifdef _WCONIO_DEFINED
|
||||
static PyObject *
|
||||
msvcrt_getwche(PyObject *self, PyObject *args)
|
||||
|
@ -201,6 +265,11 @@ msvcrt_getwche(PyObject *self, PyObject *args)
|
|||
s[0] = ch;
|
||||
return PyUnicode_FromUnicode(s, 1);
|
||||
}
|
||||
|
||||
PyDoc_STRVAR(getwche_doc,
|
||||
"getwche() -> Unicode key character\n\
|
||||
\n\
|
||||
Wide char variant of getche(), returning a Unicode value.");
|
||||
#endif
|
||||
|
||||
static PyObject *
|
||||
|
@ -216,6 +285,11 @@ msvcrt_putch(PyObject *self, PyObject *args)
|
|||
return Py_None;
|
||||
}
|
||||
|
||||
PyDoc_STRVAR(putch_doc,
|
||||
"putch(char) -> None\n\
|
||||
\n\
|
||||
Print the character char to the console without buffering.");
|
||||
|
||||
#ifdef _WCONIO_DEFINED
|
||||
static PyObject *
|
||||
msvcrt_putwch(PyObject *self, PyObject *args)
|
||||
|
@ -229,6 +303,11 @@ msvcrt_putwch(PyObject *self, PyObject *args)
|
|||
Py_RETURN_NONE;
|
||||
|
||||
}
|
||||
|
||||
PyDoc_STRVAR(putwch_doc,
|
||||
"putwch(unicode_char) -> None\n\
|
||||
\n\
|
||||
Wide char variant of putch(), accepting a Unicode value.");
|
||||
#endif
|
||||
|
||||
static PyObject *
|
||||
|
@ -245,6 +324,12 @@ msvcrt_ungetch(PyObject *self, PyObject *args)
|
|||
return Py_None;
|
||||
}
|
||||
|
||||
PyDoc_STRVAR(ungetch_doc,
|
||||
"ungetch(char) -> None\n\
|
||||
\n\
|
||||
Cause the character char to be \"pushed back\" into the console buffer;\n\
|
||||
it will be the next character read by getch() or getche().");
|
||||
|
||||
#ifdef _WCONIO_DEFINED
|
||||
static PyObject *
|
||||
msvcrt_ungetwch(PyObject *self, PyObject *args)
|
||||
|
@ -259,6 +344,11 @@ msvcrt_ungetwch(PyObject *self, PyObject *args)
|
|||
Py_INCREF(Py_None);
|
||||
return Py_None;
|
||||
}
|
||||
|
||||
PyDoc_STRVAR(ungetwch_doc,
|
||||
"ungetwch(unicode_char) -> None\n\
|
||||
\n\
|
||||
Wide char variant of ungetch(), accepting a Unicode value.");
|
||||
#endif
|
||||
|
||||
static void
|
||||
|
@ -332,16 +422,16 @@ seterrormode(PyObject *self, PyObject *args)
|
|||
|
||||
/* List of functions exported by this module */
|
||||
static struct PyMethodDef msvcrt_functions[] = {
|
||||
{"heapmin", msvcrt_heapmin, METH_VARARGS},
|
||||
{"locking", msvcrt_locking, METH_VARARGS},
|
||||
{"setmode", msvcrt_setmode, METH_VARARGS},
|
||||
{"open_osfhandle", msvcrt_open_osfhandle, METH_VARARGS},
|
||||
{"get_osfhandle", msvcrt_get_osfhandle, METH_VARARGS},
|
||||
{"kbhit", msvcrt_kbhit, METH_VARARGS},
|
||||
{"getch", msvcrt_getch, METH_VARARGS},
|
||||
{"getche", msvcrt_getche, METH_VARARGS},
|
||||
{"putch", msvcrt_putch, METH_VARARGS},
|
||||
{"ungetch", msvcrt_ungetch, METH_VARARGS},
|
||||
{"heapmin", msvcrt_heapmin, METH_VARARGS, heapmin_doc},
|
||||
{"locking", msvcrt_locking, METH_VARARGS, locking_doc},
|
||||
{"setmode", msvcrt_setmode, METH_VARARGS, setmode_doc},
|
||||
{"open_osfhandle", msvcrt_open_osfhandle, METH_VARARGS, open_osfhandle_doc},
|
||||
{"get_osfhandle", msvcrt_get_osfhandle, METH_VARARGS, get_osfhandle_doc},
|
||||
{"kbhit", msvcrt_kbhit, METH_VARARGS, kbhit_doc},
|
||||
{"getch", msvcrt_getch, METH_VARARGS, getch_doc},
|
||||
{"getche", msvcrt_getche, METH_VARARGS, getche_doc},
|
||||
{"putch", msvcrt_putch, METH_VARARGS, putch_doc},
|
||||
{"ungetch", msvcrt_ungetch, METH_VARARGS, ungetch_doc},
|
||||
{"SetErrorMode", seterrormode, METH_VARARGS},
|
||||
#ifdef _DEBUG
|
||||
{"CrtSetReportFile", msvcrt_setreportfile, METH_VARARGS},
|
||||
|
@ -349,10 +439,10 @@ static struct PyMethodDef msvcrt_functions[] = {
|
|||
{"set_error_mode", msvcrt_seterrormode, METH_VARARGS},
|
||||
#endif
|
||||
#ifdef _WCONIO_DEFINED
|
||||
{"getwch", msvcrt_getwch, METH_VARARGS},
|
||||
{"getwche", msvcrt_getwche, METH_VARARGS},
|
||||
{"putwch", msvcrt_putwch, METH_VARARGS},
|
||||
{"ungetwch", msvcrt_ungetwch, METH_VARARGS},
|
||||
{"getwch", msvcrt_getwch, METH_VARARGS, getwch_doc},
|
||||
{"getwche", msvcrt_getwche, METH_VARARGS, getwche_doc},
|
||||
{"putwch", msvcrt_putwch, METH_VARARGS, putwch_doc},
|
||||
{"ungetwch", msvcrt_ungetwch, METH_VARARGS, ungetwch_doc},
|
||||
#endif
|
||||
{NULL, NULL}
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue