进程需要按<enter>继续。是否可以使用Mono GTK#?</enter>

时间:2012-07-29 05:33:49

标签: c# linux shell process gtk#

我正在尝试使用Mono中的GTK#运行“dh_make”shell命令。问题是:dh_make要求进程开始工作,按键。我不知道是否可以使用C#。你能帮助我吗?

3 个答案:

答案 0 :(得分:1)

正如我所评论的那样,您需要使用g_spawn_async_with_pipes让管道与dh_make进程通信。使用Gtk,您可能需要掌握main event loop并使用g_child_watch_add添加观看儿童,并使用g_io_add_watch进行频道观看。您可能必须使用两个通道(即管道),一个用于输入dh_make,另一个用于输出。

如果您不清楚pipes是什么,请考虑阅读好的advanced linux programmingadvanced unix programming书。 Gtk的主循环是为你做多路复用poll

如果您想了解这些低级Gtk / Glib函数如何粘合到Gtk#,请研究Gtk#文档并最终查看其源代码(可能在源代码上使用grep Gtk#)。 Gtk#可能有一些与之相关的测试或演示或示例代码。

答案 1 :(得分:1)

是的,绝对可以模仿对进程的“输入”按压作为用户的输入。下面的代码就是这样,通过将dh_make作为一个单独的进程启动,将其标准输入引导到创建进程的输出中,并将'enter'作为输入发送到dh_make进程:

System.Diagnostics.Process myProcess = new System.Diagnostics.Process();
myProcess.StartInfo.FileName = "dh_make";
myProcess.StartInfo.Arguments = "(put here any command line arguments you need)";
myProcess.StartInfo.UseShellExecute = false;
myProcess.StartInfo.RedirectStandardInput = true;
myProcess.Start();
System.IO.StreamWriter myStreamWriter = myProcess.StandardInput;

// The following will put an 'Enter' on the first dh_make request for user input
myStreamWriter.WriteLine(" "); 

我目前在几段代码中使用它,它运行得很好。

希望有所帮助!

答案 2 :(得分:1)

        process.StartInfo.WorkingDirectory = "'/home/"+user+"/pacotes/"+nome_pacote.Text+"-1.0/'";
        process.StartInfo.FileName="dh_make";
        process.StartInfo.Arguments="-n -s";
        process.StartInfo.UseShellExecute = false;
        process.StartInfo.RedirectStandardInput = true;
        process.Start();
        System.IO.StreamWriter myStreamWriter = process.StandardInput;
        myStreamWriter.WriteLine(" ");
        process.WaitForExit();

在调试时,我收到以下错误:奇数字符'&gt;',预期在元素'filename 的属性名称'unknown'之后'='。你知道可能是什么吗?