[C++-sig] Embedded Python Terminal Output
Dietrich Bollmann
diresu at web.de
Fri May 9 04:55:33 CEST 2008
On Thu, 2008-05-08 at 10:16 -0700, Thomas Hrabe wrote:
>
> Ok, and how would I do that?
> What other Python class will I choose then?
Not sure if this is what you want?:
python
Python 2.5.2 (r252:60911, Apr 27 2008, 11:46:35)
[GCC 4.2.3 (Debian 4.2.3-3)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> import sys
>>> import cStringIO
>>> print 'stdout'
stdout
>>> some error
File "<stdin>", line 1
some error
^
SyntaxError: invalid syntax
>>> saveout = sys.stdout
>>> outbuf = cStringIO.StringIO()
>>> sys.stdout = outbuf
>>> saveerr = sys.stderr
>>> errbuf = cStringIO.StringIO()
>>> sys.stderr = errbuf
>>> print 'buffered stdout'
>>> buffered error
>>> sys.stderr = saveerr
>>> errstr = errbuf.getvalue()
>>> errbuf.close()
>>> sys.stdout = saveout
>>> outstr = outbuf.getvalue()
>>> outbuf.close()
>>> print outstr
buffered stdout
>>> print errstr
File "<stdin>", line 1
buffered error
^
SyntaxError: invalid syntax
>>> print 'stdout'
stdout
>>> some error
File "<stdin>", line 1
some error
^
SyntaxError: invalid syntax
>>>
Here the same in c - implemented to be used in a python shell client
for blender ( http://formgames.org/blender/command-port/ ,
http://www.blender.org/ ) - see the appended file
stdouterr-buffer.tar.gz
Dietrich
$ gunzip stdouterr-buffer.tar.gz
$ tar xvf stdouterr-buffer.tar
stdouterr-buffer/
stdouterr-buffer/py_stdouterr_buffer.h
stdouterr-buffer/py_stdouterr_buffer.c
stdouterr-buffer/README
stdouterr-buffer/py_stdouterr_buffer_test.c
stdouterr-buffer/error_codes.h
stdouterr-buffer/Makefile
$ cd stdouterr-buffer
$ cat README
README - Dietrich Bollmann
* py_stdouterr_buffer
** usage
gunzip stdouterr-buffer.tar.gz
tar xvf stdouterr-buffer.tar
cd stdouterr-buffer
PYTHON_INCLUDE=/usr/include/python2.5
PYTHON_LIB=/usr/lib/libpython2.5.so make
./py_stdouterr_buffer_test
** docs
- 4.5 StringIO -- Read and write strings as files
http://www.python.org/doc/current/lib/module-StringIO.html
fin.
$ PYTHON_INCLUDE=/usr/include/python2.5
PYTHON_LIB=/usr/lib/libpython2.5.so make
gcc py_stdouterr_buffer_test.c -c -g -I/usr/include/python2.5/Include
-I/usr/include/python2.5 -I.
gcc py_stdouterr_buffer.c -c -g -I/usr/include/python2.5/Include
-I/usr/include/python2.5 -I.
gcc py_stdouterr_buffer_test.o
py_stdouterr_buffer.o /usr/lib/libpython2.5.so -o
py_stdouterr_buffer_test
$ ./py_stdouterr_buffer_test
>>> ========================================================
>>> redirect stdin / stdout to write into a string :)
>>> --------------------------------------------------------
>>> ========================================================
>>> experiment 0
>>> --------------------------------------------------------
<stdout,0,0>
<stderr,0,0>
<stdout,0,3>
<stderr,0,3>
# buffered stdout:
>>><stdout,0,1>
<stdout,0,2>
<<<
# buffered stderr:
>>><stderr,0,1>
<stderr,0,2>
<<<
>>> ========================================================
>>> experiment 1
>>> --------------------------------------------------------
<stdout,1,0>
<stderr,1,0>
<stdout,1,3>
<stderr,1,3>
# buffered stdout:
>>><stdout,1,1>
<stdout,1,2>
<<<
# buffered stderr:
>>><stderr,1,1>
<stderr,1,2>
<<<
>>> ========================================================
>>> experiment 2
>>> --------------------------------------------------------
<stdout,2,0>
<stderr,2,0>
<stdout,2,3>
<stderr,2,3>
# buffered stdout:
>>><stdout,2,1>
<stdout,2,2>
<<<
# buffered stderr:
>>><stderr,2,1>
<stderr,2,2>
<<<
>>> ========================================================
>>> ========================================================
bye... :)
$
-------------- next part --------------
A non-text attachment was scrubbed...
Name: stdouterr-buffer.tar
Type: application/x-tar
Size: 20480 bytes
Desc: not available
URL: <http://mail.python.org/pipermail/cplusplus-sig/attachments/20080509/37783e91/attachment.tar>
More information about the Cplusplus-sig
mailing list