[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