首页 新闻 会员 周边

C# 通过控制台调用 python 不能异步获取控制台信息

0
悬赏园豆:50 [已关闭问题] 关闭于 2010-09-27 08:45

目前手里有些处理数据的 python 脚本需要通过 .net 进行整合, 数据量一般都比较大,需要异步获取控制台信息。

下面的程序调用 ping 命令没问题,可以异步获取信息,但是调用 python 脚本就不行,非要等到执行完了才能获取信息(python 通过 print 和 sys.stdout.write 标准输出)

有没做过类型项目的同学,帮忙看一下,纠结几天了。

private void btnCall_Click(object sender, EventArgs e)
{
using (Process process = new System.Diagnostics.Process())
{
//process.StartInfo.FileName = "ping";
//process.StartInfo.Arguments = "127.0.0.1 -t";

process.StartInfo.FileName
= @"C:\Python24\python.exe";
process.StartInfo.Arguments
= @"E:\Script\ProcessData.py D:\Data";

process.StartInfo.UseShellExecute
= false;
process.StartInfo.CreateNoWindow
= true;
process.StartInfo.RedirectStandardOutput
= true;

process.Start();
process.BeginOutputReadLine();
process.OutputDataReceived
+= new DataReceivedEventHandler(process_OutputDataReceived);
}
}


private void process_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
if (!string.IsNullOrEmpty(e.Data))
this.AppendText(e.Data + Environment.NewLine);
}

public delegate void AppendTextCallback(string text);

public void AppendText(string text)
{
if (this.txtMsg.InvokeRequired)
{
AppendTextCallback d
= new AppendTextCallback(AppendText);
this.txtMsg.Invoke(d, text);
}
else
{
this.txtMsg.AppendText(text);
}
}

 

问题补充: 找到原因 Python 输出的问题,默认缓冲区满了才会输出, 运行时加 -u 参数就可以立即输出了。
mapig的主页 mapig | 初学一级 | 园豆:200
提问于:2010-09-26 16:34
< >
分享
所有回答(2)
0

大侠  我目前正进行一个类似的项目,不过是数据流向是相反的, 我要在Python中获得c#的控制台信息 怎么做啊?

f110 | 园豆:65 (初学一级) | 2011-12-01 14:07
0

大神,请问这个如何在WPF上实习上诉功能呢?

HHHHH1 | 园豆:202 (菜鸟二级) | 2015-10-13 16:59
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册