summaryrefslogtreecommitdiffstats
path: root/Doc/faq
diff options
context:
space:
mode:
authorAntoine Pitrou <solipsis@pitrou.net>2011-12-03 21:40:23 (GMT)
committerAntoine Pitrou <solipsis@pitrou.net>2011-12-03 21:40:23 (GMT)
commit61fed9ccd3a3415d1d6fabc7cb9fad0c2a01de79 (patch)
tree63c714ed2b64e6bb600d9e158536759789aab050 /Doc/faq
parentb6032f55d2540116b30d26a64d6a1365e27bf83b (diff)
parentcc809a286a7f61a1f7605ad83a601cd2a4c10a28 (diff)
downloadcpython-61fed9ccd3a3415d1d6fabc7cb9fad0c2a01de79.zip
cpython-61fed9ccd3a3415d1d6fabc7cb9fad0c2a01de79.tar.gz
cpython-61fed9ccd3a3415d1d6fabc7cb9fad0c2a01de79.tar.bz2
Merge from 3.2
Diffstat (limited to 'Doc/faq')
-rw-r--r--Doc/faq/extending.rst28
-rw-r--r--Doc/faq/general.rst37
2 files changed, 17 insertions, 48 deletions
diff --git a/Doc/faq/extending.rst b/Doc/faq/extending.rst
index 7adedf5..fa245c7 100644
--- a/Doc/faq/extending.rst
+++ b/Doc/faq/extending.rst
@@ -99,12 +99,7 @@ many other useful protocols.
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
-``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.
+You can't. Use :c:func:`PyTuple_Pack` instead.
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
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!
+
+A custom object to do the same would look like this::
- >>> class StdoutCatcher:
+ >>> import io, sys
+ >>> class StdoutCatcher(io.TextIOBase):
... def __init__(self):
- ... self.data = ''
+ ... self.data = []
... def write(self, stuff):
- ... self.data = self.data + stuff
+ ... self.data.append(stuff)
...
>>> import sys
>>> sys.stdout = StdoutCatcher()
>>> print('foo')
>>> print('hello world!')
- >>> sys.stderr.write(sys.stdout.data)
+ >>> sys.stderr.write(''.join(sys.stdout.data))
foo
hello world!
diff --git a/Doc/faq/general.rst b/Doc/faq/general.rst
index 01b4866..53c3b61 100644
--- a/Doc/faq/general.rst
+++ b/Doc/faq/general.rst
@@ -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
extension language for applications that need a programmable interface.
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
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
joining `the edu-sig mailing list
<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.