我可以运行使用process.start()
的命令行进程。 我可以使用标准输入提供输入。之后,当进程再次要求用户输入时,我的程序如何知道并将输入传递给该exe文件?使用c运行交互式命令行exe#
回答
有一个example here听起来类似于你需要什么,使用Process.StandardInput
和StreamWriter
。
Process sortProcess;
sortProcess = new Process();
sortProcess.StartInfo.FileName = "Sort.exe";
// Set UseShellExecute to false for redirection.
sortProcess.StartInfo.UseShellExecute = false;
// Redirect the standard output of the sort command.
// This stream is read asynchronously using an event handler.
sortProcess.StartInfo.RedirectStandardOutput = true;
sortOutput = new StringBuilder("");
// Set our event handler to asynchronously read the sort output.
sortProcess.OutputDataReceived += new DataReceivedEventHandler(SortOutputHandler);
// Redirect standard input as well. This stream
// is used synchronously.
sortProcess.StartInfo.RedirectStandardInput = true;
sortProcess.Start();
// Use a stream writer to synchronously write the sort input.
StreamWriter sortStreamWriter = sortProcess.StandardInput;
// Start the asynchronous read of the sort output stream.
sortProcess.BeginOutputReadLine();
Console.WriteLine("Ready to sort up to 50 lines of text");
String inputText;
int numInputLines = 0;
do
{
Console.WriteLine("Enter a text line (or press the Enter key to stop):");
inputText = Console.ReadLine();
if (!String.IsNullOrEmpty(inputText))
{
numInputLines ++;
sortStreamWriter.WriteLine(inputText);
}
}
希望帮助
如果我理解正确,我认为您应该可以通过使用RedirectStandardOutput和RedirectStandardInput重定向标准输入/输出来完成此操作。
WinSCP项目有一个C#示例,用于如何使用这种方式与它进行通信。你可以在这里找到它:SFTP file transfers in .NET(虽然此示例仅收集输出,而不使用它所有,但该技术应该是一样的。)
谢谢你的答复。我尝试过这个。但是要求用户输入的过程不是预定义的。该方案是像 1.我想设计在线compliler为C# 2.我可以使用代码创建该程序n cretae exe文件 3.现在我想通过C#运行该exe文件 4.用户可以编写任何类型的在diff阶段需要用户输入的程序。 希望你能理解整个场景 – rajshades 2010-07-22 12:21:18
@rajshades:我会认为这会是类似的,但不是一次性发送所有命令,而是发送命令,读取输出,发送下一个命令等我虽然没有测试过。作为一个普遍的说明,如果你正在创建这个exe文件,你能不能尝试给它一些更好的方式来与它进行通信(WCF,TCP/IP协议,命名管道等)? – 2010-07-22 12:49:48
你想查找IPC。正如罗伯特所示,.NET中的Process
类将帮助您。但专门为你的问题(如何知道何时写数据):你不能。不是一般的。
如果您知道所需的输入(例如“yyy”),则可以在创建的过程的STDIN
中提供。您不必等待程序请求这些信息:它只会在需要数据时从STDIN
中读取。
如果您需要处理程序输出以决定要写入STDIN
的内容,请尝试阅读进程STDOUT
。你可能会遇到冲洗的问题,虽然...
- 1. 在Paramiko中运行交互式命令
- 2. 用apache commons运行交互命令exec
- 3. 在C运行时与命令行程序交互(stdin/out)C
- 4. 从java运行交互式命令行应用程序
- 5. 使用Ruby的命令行交互
- 6. 如何交互使用php命令行?
- 7. C的命令行交互shell
- 8. Emacs如何在交互命令行模式下运行命令elisp
- 9. 交互式shell脚本命令行php
- 10. 交互命令行模式emacs
- 11. 真正的交互式命令行
- 12. 执行交互shell命令
- 13. 如何使用python的交互式输入运行命令行程序?
- 14. 在CLI模式下从PHP运行交互式shell命令
- 15. 使用java运行交互式shellScript
- 16. 通过ssh运行交互式Bash命令
- 17. 从Windows命令提示符以交互方式运行R
- 18. 如何在交互模式下运行sbt multiple命令
- 19. 命令在交互式shell中运行,但不在shell脚本中运行
- 20. 如何以交互模式运行sbt multiple命令作为一个命令?
- 21. 我可以使用Fabric来执行交互式shell命令吗?
- 22. 使用命令行非交互式拼写检查文件
- 23. 如何使用ProcessBuilder进行交互式命令?
- 24. C#命令行,运行两个命令
- 25. C#运行命令不执行命令
- 26. 使用java的交互式命令Runtime.getRunTime.exec()
- 27. 使用NSPipe交互式命令
- 28. 使用NSTask交互式访问命令
- 29. 运行Build.pl非交互式
- 30. PyGreSQL交互式运行SQL
你可能感兴趣的[这篇文章](http://www.codeducky.org/process-handling-net)涵盖了许多错综复杂的工作。 NET进程,尤其是在处理输入和输出 – ChaseMedallion 2014-08-29 01:38:17