如何解决从 c# 应用程序与 python 交互
我想编写一个与 python 进程交互的 C# 应用程序。请参阅下面的示例代码。在启动 python 进程并写入其 StdIn 后,在 StdIn 流关闭之前什么也不会发生。关闭时,执行通过 StdIn 提交的代码,然后关闭 python 进程。如何让python执行通过StdIn提交的代码而不必先关闭StdIn?
StringBuilder strOut = new StringBuilder();
processstartinfo processstartinfo = new processstartinfo();
Process process = new Process();
processstartinfo.CreateNowindow = true;
processstartinfo.RedirectStandardOutput = true;
processstartinfo.RedirectStandardInput = true;
processstartinfo.RedirectStandardError = true;
processstartinfo.UseShellExecute = false;
processstartinfo.Arguments = "";
processstartinfo.FileName = "c:\\python39\\python.exe";
process.StartInfo = processstartinfo;
process.EnableRaisingEvents = true;
process.OutputDataReceived += new DataReceivedEventHandler
(
delegate (object sndr,DataReceivedEventArgs ee)
{
Console.WriteLine("received=" + ee.Data);
strOut.Append(ee.Data);
}
);
process.ErrorDataReceived += new DataReceivedEventHandler
(
delegate (object sndr,DataReceivedEventArgs ee)
{
Console.WriteLine("error=" + ee.Data);
strOut.Append("Error:" + ee.Data);
}
);
process.Start();
StreamWriter wrtr = process.StandardInput;
process.BeginoutputReadLine();
process.BeginErrorReadLine();
wrtr.WriteLine("import sys");
wrtr.WriteLine("print('Line 1')");
Thread.Sleep(1000);
wrtr.WriteLine("prxint('Line 2')");
wrtr.WriteLine("sys.exit('Test Exit')");
wrtr.Close();
Thread.Sleep(1000);
process.WaitForExit();
process.CancelOutputRead();
string output = strOut.ToString();
解决方法
Python 尝试检测它在什么环境下运行。
它切换到非交互模式,因为 UseShellExecute = false
导致它不在终端窗口中运行。您可以通过传递 -i
参数来强制执行交互模式:processStartInfo.Arguments = "-i";
您也可以添加 -q
以禁用版权和版本信息
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。