stdout custom
castironpi at gmail.com
castironpi at gmail.com
Tue Mar 18 16:54:19 EDT 2008
> > >>> Can I allocate a second console window, so I can place certain output
> > >>> to that directly, and leave the original streams alone?
>
> > I've rather lost track of what you're trying to do, but I would
> > second Gabriel's suggestion of the standard Windows method of
> > debug output: using OutputDebugString. There's an example here:
>
> >http://timgolden.me.uk/python/win32_how_do_i/capture-OutputDebugStrin...
>
> > and it shouldn't be too hard to wrap it in a file-like
> > object for stderr-substitution use, say.
>
> > Obviously there are 1,001 other ways of doing IPC but since this
> > one's ready-made you might as well use it. You can distinguish
> > between different processes' outputs by virtue of the PID which
> > is the first item on the mmap.
>
> > TJG
>
> I want a handle to another window.
>
> Create B with a command.
> ___ ___
> |A | |B |
> |___| |___|
>
> B.stdin (the stdin to B).write( '?' )
> ___ ___
> |A | |B? |
> |___| |___|
>
> A.stdout.write( '*' )
> ___ ___
> |A* | |B? |
> |___| |___|
This is a little weird. I visited your link, but couldn't make any
sense of it, so I tried something else myself. I'm not even sure what
it accomplishes, but if you're on a different tack or way ahead of me,
that can happen. However, it might be closer than I think to what I
want-- my next step is to CreateProcess in the separate executable...
then try to merge in back into python and subprocess.
Now I've tried:
>>> p= Popen( '\\astdin.exe', creationflags= 16, stdin= PIPE )
>>> p.stdin.write( b'123\r\n' )
5
and I get the message box (lower), but no ':' sentinel nor the
output. However the p.stdin.write call still returns if I close the
new console window and call it after.
astdin.cpp:
#include <windows.h>
#include <iostream>
#include <string>
using namespace std;
DWORD WINAPI ThreadProc( LPVOID ) {
while (1)
{
Sleep( 1000 );
cout<< ':';
}
}
int main() {
MessageBox( NULL, "none", NULL, 0 );
cout<< "Ok"<< endl;
CreateThread( NULL, 0, ThreadProc, NULL, 0, NULL );
while (1)
{
string s;
cin>> s;
cout<< '>';
cout<< s;
}
return 0;
}
More information about the Python-list
mailing list