我正在尝试更新1995年用pascal或c编写的程序。我不确定编程语言。命令行程序。现在我用C#编码。我想阅读子程序输出。有可能吗?
我试了一下。但没有成功。他们是:
private void aboutToolStripMenuItem_Click(object sender, EventArgs e)
{
// Redirect the output stream of the child process.
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.FileName = "asdd.exe";
p.Start();
logs.AppendText("Timer Started\n");
timer1.Enabled = true;
}
private void timer1_Tick(object sender, EventArgs e)
{
// write somethingg and read what is the program doing on command line?
// What is the program printint? etc...
// I try this code but not enough for mo.
// logs.AppendText("d:" + p.StandardOutput.ReadToEnd()+"\n");
}
private void p_Exited(object sender, EventArgs e)
{
timer1.Enabled = false;
}
我对java,cpp,c或c#中的任何想法持开放态度。
编辑:
例如:
我的asdd.exe程序源代码是
#include<stdio.h>
int main(){
printf("something\n");
printf("something, too\n");
}
此程序调用C#和日志richTextBox附加:
something
something, too
答案 0 :(得分:1)
我认为您需要连接到StandardInput。
http://msdn.microsoft.com/en-us/library/system.diagnostics.process.standardinput.aspx
答案 1 :(得分:0)
ReadToEnd
不会返回任何数据。如果要在程序运行时查看输出,则可能需要一次读取一行或甚至一次读取一个字符。
答案 2 :(得分:0)
这就是我通常从单独的过程中读取的内容。现在这将阻止当前线程,直到处理完成,所以我使用后台线程。
process.StartInfo.FileName = "program.exe"
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardInput = true;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.CreateNoWindow = true;
process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
process.Start();
process.StandardInput.WriteLine(data);
string result = process.StandardOutput.ReadToEnd();
process.WaitForExit();
答案 3 :(得分:0)
这篇MSDN文章似乎正是您所寻找的。 p>