【发布时间】:2011-01-23 18:01:58
【问题描述】:
如果这是一个重复的问题,我深表歉意,我搜索了一下,找不到任何类似的东西 - 我有一个 Python 库,它通过套接字连接到我的 C# 应用程序,以便允许简单的 Python 脚本(IronPython 不是出于几个原因,现在是一个选项)。我想创建一个 Windows 窗体控件,它基本上是 Python 解释器的图形前端,这样用户就可以运行解释器而不必打开单独的控制台窗口。
我在下面附上了我迄今为止尝试过的简单演示,但我无法让它工作。永远不会调用 DataReceived 事件处理程序,并且当我尝试写入标准输入时,解释器中没有任何反应。有没有人对我做错了什么有任何反馈,或者这是否可能?
public partial class Form1 : Form
{
Process _pythonProc;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
ProcessStartInfo psi = new ProcessStartInfo()
{
FileName = @"C:\Python26\Python.exe",
CreateNoWindow = true,
UseShellExecute = false,
RedirectStandardInput = true,
RedirectStandardOutput = true,
RedirectStandardError = true
};
_pythonProc = new Process();
_pythonProc.OutputDataReceived += OutputDataReceived;
_pythonProc.ErrorDataReceived += ErrorDataReceived;
_pythonProc.StartInfo = psi;
_pythonProc.Start();
}
private void cmdExecute_Click(object sender, EventArgs e)
{
string cmd = textInput.Text;
_pythonProc.StandardInput.WriteLine(cmd);
_pythonProc.StandardInput.Flush();
textInput.Text = string.Empty;
}
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
if (!_pythonProc.HasExited)
_pythonProc.Kill();
}
private void OutputDataReceived(object sender, DataReceivedEventArgs args)
{
textOutput.Text += args.Data;
}
private void ErrorDataReceived(object sender, DataReceivedEventArgs args)
{
textOutput.Text += args.Data;
}
}
【问题讨论】:
标签: c# python redirect stdout stdin