Dino Viehland wrote:
> You can always provide your own stream which is aware of what the current
> output window is. It could store this in a thread static or just some
> variable that you update whenever the active window changes. You can set
> that via ScriptRuntime.IO.OutputStream. You could conceptually do the exact
> same thing from Python just by setting sys.stdout to a file-like object which
> knows what the current output window is.
This is what I'm doing right now and that's where I'm having my problem.
I don't think this is a solvable problem since the output stream is
shared by all ScriptScopes, just as the output stream for
System.Console.WriteLine is the same across the process.
In a nutshell, I have this:
class Document
{
void AppendOutput( string text )
{
m_buffer.Add(text);
}
List<string> m_buffer;
}
class ConsoleWindow: Form
{
public void WriteOutput( string text, Document doc )
{
doc.AppendOutput( text );
if( doc == m_currentDisplayingDoc )
{
textBox.Text += text;
}
}
}
class DocWriter
{
public DocWriter( ConsoleWindow console, Document doc )
{
m_console = console;
m_document = doc;
}
public void write(string text)
{
m_console.WriteOutput( text, m_document );
}
ConsoleWindow m_console;
Document m_document;
}
void OnDocumentActivate(Document doc)
{
DocWriter writer = new DocWrite(guiConsole, doc);
object sysObj = doc.scope.GetVariable("sys");
m_engine.Operations.SetMember(sysObj, "stdout", writer);
m_engine.Operations.SetMember(sysObj, "stderr", writer);
}
The problem is:
If there is a script running on DocumentA, that is streaming output, and
then I switch to DocumentB while DocumentA continues to run - the output
for DocumentA starts appearing in the console window for DocumentB as if
it was for B. This is because sysout is system wide and if I change it
while DocumentA is writing, then it starts outputting to the new stream
that was set (and that was registered with DocumentB).
-Jeff
_______________________________________________
Users mailing list
[email protected]
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com