为什么 Shellexecute=false 会打破这一点

本文关键字:这一点 false Shellexecute 为什么 | 更新日期: 2023-09-27 17:56:57

我现在正在学习C#以获得一些乐趣,并正在尝试制作一个Windows应用程序,该应用程序具有一些用于运行一些python命令的GUI。基本上,我试图自学运行进程并向它发送命令以及从中接收命令的胆量。

我目前有以下代码:

Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.FileName = "C:/Python31/python.exe";
p.Start();
string output = p.StandardOutput.ReadToEnd();
p.WaitForExit();
textBox1.Text = output;

从命令提示符运行 python.exe 会提供一些介绍性文本,我想捕获这些文本并将其发送到窗口窗体 (textBox1) 中的文本框。基本上,目标是让一些看起来像从Windows应用程序运行的python控制台的东西。当我没有将 UseShellExecute 设置为 false 时,会弹出一个控制台,一切运行正常;但是,当我将UseShellExecute设置为false以重定向输入时,我得到的只是一个控制台非常快速地弹出并再次关闭。

我在这里做错了什么?

为什么 Shellexecute=false 会打破这一点

出于某种原因,在启动该过程时不应使用正斜杠。

比较(不起作用):

Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.FileName = "C:/windows/system32/cmd.exe";
p.StartInfo.Arguments = "/c dir" ;
p.OutputDataReceived += new DataReceivedEventHandler(p_OutputDataReceived);
bool f = p.Start();
p.BeginOutputReadLine();
p.WaitForExit();

[...]

static void p_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
    Console.WriteLine(e.Data);
}

到(按预期工作):

Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.FileName = @"C:'windows'system32'cmd.exe";
p.StartInfo.Arguments = "/c dir" ;
p.OutputDataReceived += new DataReceivedEventHandler(p_OutputDataReceived);
bool f = p.Start();
p.BeginOutputReadLine();
p.WaitForExit();

[...]
static void p_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
    Console.WriteLine(e.Data);
}

Python 似乎在做一些奇怪的事情。直到我测试了它,然后做了一些研究,我才相信它。但所有这些帖子基本上似乎都有相同的确切问题:

  • https://stackoverflow.com/questions/4106095/capturing-standard-output-from-django-using-c
  • Python
  • 和C#:IronPython是绝对必要的吗?
  • C# 捕获 python.exe 输出并将其显示在文本框中
  • 某些 Python 命令未在 Stdout 中捕获