Python for .NET and IronPython
Gerard Flanagan
grflanagan at yahoo.co.uk
Thu Nov 3 07:36:52 EST 2005
John Salerno wrote:
> Hi all. I'm currently learning C#, and I'm also interested in learning
> Python
In a similar position to yourself - learning both languages - I can
definitely recommend Python ( though C# 's curly brackets might annoy
you more than they did before!!)
> so it seems like a decent
> idea to want to integrate the two
FWIW, what I've been doing lately is calling Python scripts from
Windows.Forms apps, capturing their 'StdOut'. There's an article on
http://www.thecodeproject.com which explains how you can do this
asynchronously, but the following (C#) code is what I'm using ( imagine
a Windows Form with a TextBox to enter the script name, another to
enter any arguments for the script, and 'Run', 'Cancel' and 'Browse'
CommandButtons).
(assumes the script requires no user interaction)
private void BrowseForScript_Click(object sender, System.EventArgs e)
{
if ( this.openFileDialog.ShowDialog() == DialogResult.OK )
{
this.txtIO.Clear();
this.txtIO.Focus();
this.txtIO.AppendText( openFileDialog.FileName);
}
}
private void Run_Click(object sender, System.EventArgs e)
{
System.Diagnostics.ProcessStartInfo startInfo;
System.Diagnostics.Process process;
string directory;
string pyArgs;
string script;
script = this.txtIO.Text.Trim();
if ( script == null || script.Length == 0 )
{
return;
}
try
{
directory = Path.GetDirectoryName( script );
script = Path.GetFileName( script );
}
catch (ArgumentException)
{
MessageBox.Show("The script file path contains invalid characters.",
"Invalid Script Path",
MessageBoxButtons.OK,
MessageBoxIcon.Error);
return;
}
if ( script.Length == 0 )
{
MessageBox.Show("No script file has been specified.",
"Invalid Script Path",
MessageBoxButtons.OK,
MessageBoxIcon.Error);
return;
}
if ( directory == null || directory.Length == 0 )
{
directory = DEFAULT_SCRIPT_DIRECTORY;
}
pyArgs = this.txtArgs.Text.Trim();
startInfo = new ProcessStartInfo("python");
startInfo.WorkingDirectory = directory;
startInfo.Arguments = script + " " + pyArgs;
startInfo.UseShellExecute = false;
startInfo.CreateNoWindow = true;
startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardError = true;
process = new Process();
process.StartInfo = startInfo;
process.Start();
string s;
while ((s = process.StandardOutput.ReadLine()) != null)
{
this.__application.Write( s + "\n" );
}
while ((s = process.StandardError.ReadLine()) != null)
{
this.__application.Write( s + "\n" );
}
}
Gerard
More information about the Python-list
mailing list