[英]interacting with python from c# application
我想编写一个与 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
以禁用版权和版本消息
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.