Merge from 3.2
This commit is contained in:
commit
61fed9ccd3
|
@ -99,12 +99,7 @@ many other useful protocols.
|
||||||
How do I use Py_BuildValue() to create a tuple of arbitrary length?
|
How do I use Py_BuildValue() to create a tuple of arbitrary length?
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
|
|
||||||
You can't. Use ``t = PyTuple_New(n)`` instead, and fill it with objects using
|
You can't. Use :c:func:`PyTuple_Pack` instead.
|
||||||
``PyTuple_SetItem(t, i, o)`` -- note that this "eats" a reference count of
|
|
||||||
``o``, so you have to :c:func:`Py_INCREF` it. Lists have similar functions
|
|
||||||
``PyList_New(n)`` and ``PyList_SetItem(l, i, o)``. Note that you *must* set all
|
|
||||||
the tuple items to some value before you pass the tuple to Python code --
|
|
||||||
``PyTuple_New(n)`` initializes them to NULL, which isn't a valid Python value.
|
|
||||||
|
|
||||||
|
|
||||||
How do I call an object's method from C?
|
How do I call an object's method from C?
|
||||||
|
@ -147,21 +142,30 @@ this object to :data:`sys.stdout` and :data:`sys.stderr`. Call print_error, or
|
||||||
just allow the standard traceback mechanism to work. Then, the output will go
|
just allow the standard traceback mechanism to work. Then, the output will go
|
||||||
wherever your ``write()`` method sends it.
|
wherever your ``write()`` method sends it.
|
||||||
|
|
||||||
The easiest way to do this is to use the StringIO class in the standard library.
|
The easiest way to do this is to use the :class:`io.StringIO` class::
|
||||||
|
|
||||||
Sample code and use for catching stdout:
|
>>> import io, sys
|
||||||
|
>>> sys.stdout = io.StringIO()
|
||||||
|
>>> print('foo')
|
||||||
|
>>> print('hello world!')
|
||||||
|
>>> sys.stderr.write(sys.stdout.getvalue())
|
||||||
|
foo
|
||||||
|
hello world!
|
||||||
|
|
||||||
>>> class StdoutCatcher:
|
A custom object to do the same would look like this::
|
||||||
|
|
||||||
|
>>> import io, sys
|
||||||
|
>>> class StdoutCatcher(io.TextIOBase):
|
||||||
... def __init__(self):
|
... def __init__(self):
|
||||||
... self.data = ''
|
... self.data = []
|
||||||
... def write(self, stuff):
|
... def write(self, stuff):
|
||||||
... self.data = self.data + stuff
|
... self.data.append(stuff)
|
||||||
...
|
...
|
||||||
>>> import sys
|
>>> import sys
|
||||||
>>> sys.stdout = StdoutCatcher()
|
>>> sys.stdout = StdoutCatcher()
|
||||||
>>> print('foo')
|
>>> print('foo')
|
||||||
>>> print('hello world!')
|
>>> print('hello world!')
|
||||||
>>> sys.stderr.write(sys.stdout.data)
|
>>> sys.stderr.write(''.join(sys.stdout.data))
|
||||||
foo
|
foo
|
||||||
hello world!
|
hello world!
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,7 @@ It has interfaces to many system calls and libraries, as well as to various
|
||||||
window systems, and is extensible in C or C++. It is also usable as an
|
window systems, and is extensible in C or C++. It is also usable as an
|
||||||
extension language for applications that need a programmable interface.
|
extension language for applications that need a programmable interface.
|
||||||
Finally, Python is portable: it runs on many Unix variants, on the Mac, and on
|
Finally, Python is portable: it runs on many Unix variants, on the Mac, and on
|
||||||
PCs under MS-DOS, Windows, Windows NT, and OS/2.
|
Windows 2000 and later.
|
||||||
|
|
||||||
To find out more, start with :ref:`tutorial-index`. The `Beginner's Guide to
|
To find out more, start with :ref:`tutorial-index`. The `Beginner's Guide to
|
||||||
Python <http://wiki.python.org/moin/BeginnersGuide>`_ links to other
|
Python <http://wiki.python.org/moin/BeginnersGuide>`_ links to other
|
||||||
|
@ -469,38 +469,3 @@ http://www.python.org/editors/ for a full list of Python editing environments.
|
||||||
If you want to discuss Python's use in education, you may be interested in
|
If you want to discuss Python's use in education, you may be interested in
|
||||||
joining `the edu-sig mailing list
|
joining `the edu-sig mailing list
|
||||||
<http://python.org/community/sigs/current/edu-sig>`_.
|
<http://python.org/community/sigs/current/edu-sig>`_.
|
||||||
|
|
||||||
|
|
||||||
Upgrading Python
|
|
||||||
================
|
|
||||||
|
|
||||||
What is this bsddb185 module my application keeps complaining about?
|
|
||||||
--------------------------------------------------------------------
|
|
||||||
|
|
||||||
.. XXX remove this question?
|
|
||||||
|
|
||||||
Starting with Python2.3, the distribution includes the `PyBSDDB package
|
|
||||||
<http://pybsddb.sf.net/>` as a replacement for the old bsddb module. It
|
|
||||||
includes functions which provide backward compatibility at the API level, but
|
|
||||||
requires a newer version of the underlying `Berkeley DB
|
|
||||||
<http://www.sleepycat.com>`_ library. Files created with the older bsddb module
|
|
||||||
can't be opened directly using the new module.
|
|
||||||
|
|
||||||
Using your old version of Python and a pair of scripts which are part of Python
|
|
||||||
2.3 (db2pickle.py and pickle2db.py, in the Tools/scripts directory) you can
|
|
||||||
convert your old database files to the new format. Using your old Python
|
|
||||||
version, run the db2pickle.py script to convert it to a pickle, e.g.::
|
|
||||||
|
|
||||||
python2.2 <pathto>/db2pickley.py database.db database.pck
|
|
||||||
|
|
||||||
Rename your database file::
|
|
||||||
|
|
||||||
mv database.db olddatabase.db
|
|
||||||
|
|
||||||
Now convert the pickle file to a new format database::
|
|
||||||
|
|
||||||
python <pathto>/pickle2db.py database.db database.pck
|
|
||||||
|
|
||||||
The precise commands you use will vary depending on the particulars of your
|
|
||||||
installation. For full details about operation of these two scripts check the
|
|
||||||
doc string at the start of each one.
|
|
||||||
|
|
Loading…
Reference in New Issue