【问题标题】:Get result from cmd instantly without wait for end of execuction python script [duplicate]立即从cmd获取结果而无需等待执行python脚本结束[重复]
【发布时间】:2021-10-23 18:32:35
【问题描述】:

我想通过cmd实时执行python脚本的结果。

我的带有启动 pyhton 脚本的 C# 代码:

 static void cmd_DataReceived(object sender, DataReceivedEventArgs e)
    {
       // Console.WriteLine("Output from other process");
        Console.WriteLine(e.Data);
    }

    static void cmd_Error(object sender, DataReceivedEventArgs e)
    {
       // Console.WriteLine("Error from other process");
        Console.WriteLine(e.Data);
    }
  private void backgroundWorker_sizzer_DoWork(object sender, DoWorkEventArgs e)
        {
            ProcessStartInfo cmdStartInfo = new ProcessStartInfo();
            cmdStartInfo.FileName = @"C:\Windows\System32\cmd.exe";
            cmdStartInfo.RedirectStandardOutput = true;
            cmdStartInfo.RedirectStandardError = true;
            cmdStartInfo.RedirectStandardInput = true;
            cmdStartInfo.UseShellExecute = false;
            cmdStartInfo.CreateNoWindow = true;

            Process cmdProcess = new Process();
            cmdProcess.StartInfo = cmdStartInfo;
            cmdProcess.ErrorDataReceived += cmd_Error;
            cmdProcess.OutputDataReceived += cmd_DataReceived;
            cmdProcess.EnableRaisingEvents = true;
            cmdProcess.Start();
            cmdProcess.BeginOutputReadLine();
            cmdProcess.BeginErrorReadLine();

            cmdProcess.StandardInput.WriteLine("cd C:\\Users\\");     
            cmdProcess.StandardInput.WriteLine("py test.py");     //Execute script
            cmdProcess.StandardInput.WriteLine("exit");                  //Execute exit.

            cmdProcess.WaitForExit();
        }

test.py 文件包含简单示例:

import time

time.sleep(5) # Sleep for 5 seconds
print("hello")
time.sleep(10) # Sleep for 10 seconds
print("hello")
time.sleep(15) # Sleep for 15 seconds
print("hello")
time.sleep(1) # Sleep for 1 seconds

现在,当我运行 backgroundworker 时,它会立即显示所有 hello - 当 python 脚本结束他的执行时。

我想要的只是一个一个实时显示你好。当我通过 cmd 手动启动它时,它运行良好并实时显示“你好”。

【问题讨论】:

标签: python c# cmd


【解决方案1】:

问题与在 python 中缓冲 IO 有关,因为您在 C# 中调用一个进程并等待它完成,然后再读取输出缓冲区。

尝试在每次打印后使用以下命令刷新 Python 代码中的缓冲区:

sys.stdout.flush()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-11
    • 2011-07-22
    • 1970-01-01
    • 2020-06-19
    • 1970-01-01
    • 1970-01-01
    • 2021-10-10
    • 1970-01-01
    相关资源
    最近更新 更多