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