处理器窗口不在reader.ReadLine()

时间:2016-10-03 08:32:55

标签: c# docker process neo4j processstartinfo

我使用Process对接Neo4j Docker图像。我需要确保图像在对其执行操作之前正确停靠。正如您在此处所看到的,我将Docker Toolbox中的标准输出重定向到我的Process窗口并写入Docker Toolbox正在执行的操作。但是,在图像停靠后,它根本不会继续并保持该状态。超出while循环的所有代码都不会执行。

ProcessStartInfo psi = new ProcessStartInfo();
        psi.WindowStyle = ProcessWindowStyle.Normal;
        psi.FileName = ConfigurationManager.AppSettings["Bash"];
        psi.WorkingDirectory = ConfigurationManager.AppSettings["ToolBox"];
        psi.Arguments = BuildArgumentString();
        psi.UseShellExecute = false;//set to false to redirect standard output
        psi.RedirectStandardOutput = true;

        Process process = Process.Start(psi);

        StreamReader reader = process.StandardOutput;

        while (!reader.EndOfStream)
        {
            Console.WriteLine(reader.ReadLine());
        }

        //codes beyond this while loop is not executed

这是流程窗口。

enter image description here

1 个答案:

答案 0 :(得分:1)

您的容器以交互方式运行,而不是分离。循环不会返回主程序,因为它正在等待流的结束 - 但只要运行它的容器将连接到stdin和{{ 1}}并且流不会结束。

Docker CLI的工作原理是向Docker Engine的REST API发送命令。如果您通过代码管理容器,最好绕过CLI并直接使用API​​ - the Docker.DotNet项目为API提供.NET包装。