From 48383bfc67438b0e280be732a13dbc77a8dceb8e Mon Sep 17 00:00:00 2001 From: Antoine Pitrou Date: Sat, 3 Dec 2011 22:30:19 +0100 Subject: [PATCH 1/4] Advocate PyTuple_Pack instead of manual building of tuples --- Doc/faq/extending.rst | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/Doc/faq/extending.rst b/Doc/faq/extending.rst index d88056498d2..676890e27c5 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? From d4ddec59881802aa0c92b0736ff71eb6cff84857 Mon Sep 17 00:00:00 2001 From: Antoine Pitrou Date: Sat, 3 Dec 2011 22:35:31 +0100 Subject: [PATCH 2/4] Refine FAQ entry for catching stdout --- Doc/faq/extending.rst | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/Doc/faq/extending.rst b/Doc/faq/extending.rst index 676890e27c5..7c684a09294 100644 --- a/Doc/faq/extending.rst +++ b/Doc/faq/extending.rst @@ -142,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! - >>> class StdoutCatcher: +A custom object to do the same would look like this:: + + >>> 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! From 748799a0a66672a557960bd37bc7ebf378395aa7 Mon Sep 17 00:00:00 2001 From: Antoine Pitrou Date: Sat, 3 Dec 2011 22:37:14 +0100 Subject: [PATCH 3/4] Remove outdated question (the bsddb module isn't included anymore) --- Doc/faq/general.rst | 35 ----------------------------------- 1 file changed, 35 deletions(-) diff --git a/Doc/faq/general.rst b/Doc/faq/general.rst index 01b4866d1e1..0a53d2eaaf2 100644 --- a/Doc/faq/general.rst +++ b/Doc/faq/general.rst @@ -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 `_. - - -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 -` 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 -`_ 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 /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 /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. From cc809a286a7f61a1f7605ad83a601cd2a4c10a28 Mon Sep 17 00:00:00 2001 From: Antoine Pitrou Date: Sat, 3 Dec 2011 22:39:13 +0100 Subject: [PATCH 4/4] Fix compatibility statement. --- Doc/faq/general.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Doc/faq/general.rst b/Doc/faq/general.rst index 0a53d2eaaf2..53c3b61286c 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 `_ links to other