gpt4 book ai didi

c# - 为什么 Shellexecute=false 会破坏这个?

转载 作者:太空狗 更新时间:2023-10-29 19:43:11 26 4
gpt4 key购买 nike

我目前正在学习 C# 来找点乐子,并且正在尝试制作一个具有一些图形用户界面的 Windows 应用程序来运行一些 python 命令。基本上,我正在尝试自学运行进程并向其发送命令以及从中接收命令的勇气。

我现在有以下代码:

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 会提供一些介绍性文本,我想将其捕获并发送到 Windows 窗体 (textBox1) 中的文本框。基本上,目标是让一些东西看起来像从 Windows 应用程序运行的 python 控制台。当我没有将 UseShellExecute 设置为 false 时,会弹出一个控制台并且一切正常;但是,当我将 UseShellExecute 设置为 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);
}

关于c# - 为什么 Shellexecute=false 会破坏这个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6072164/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com