[IronPython] Generated IL is always using the standard input, output and error streams.
Jean-Michel.Perraud at csiro.au
Jean-Michel.Perraud at csiro.au
Thu Apr 27 13:31:48 CEST 2006
Hi,
First, thanks Dino and Szymon for the help <Re: Using an IronPython
console with a Winforms component supporting the interactive I/O>
I came across an issue: the only output displayed were stack traces.
After a bit of investigation, I think the generated IL does not use the
custom streams of the implementation of IConsole passed to the
PythonEngine. The static property State of IP::Runtime::Ops is
initialised with a SystemState setting its fields e.g. as:
[PythonName("__stdout__")]
public object __stdout__ = new PythonFile(
Options.UnbufferedStdOutAndError ?
Console.OpenStandardOutput(0) : Console.OpenStandardOutput(),
Console.OutputEncoding,
"<stdout>",
"w");
I think that the subsequent calls to the methods in the Ops class from
the generated methods are using this State.
Incidentally, the use of static methods/properties for Ops also
effectively means that a PythonEngine should be used as a singleton if
embedded in an application. I am well aware that trying not to rely on
static method and singleton patterns often raises the code complexity a
*lot* (been there, done that...). What is the current thinking on this
topic?
Cheers,
J-M
More information about the Ironpython-users
mailing list