2014-01-11 31 views
1

我想知道是否可以读取输入流/写入多个启动进程的输出流。读取/写入多个启动的进程命令行

我想这是从我当前(弱)对启动过程的读/写如何工作的理解,它肯定会将输入/输出流附加到我的程序的控制台输入/输出流。

这是事实吗?如果是这样的话,那么读取/写入不同的数据到几个启动的命令行将被证明是复杂的,如果不是不可能的话,也不会实现。

我的理解是否正确?如何处理几个启动的命令行?


一些代码:

open System 
open System.IO 
open System.Diagnostics 
open System.Threading 

[<EntryPoint>] 
let main argv = 
    let startInfo = ProcessStartInfo() 
    startInfo.FileName <- "cmd.exe" 
    startInfo.UseShellExecute <- false 
    startInfo.RedirectStandardInput <- true 
    startInfo.RedirectStandardOutput <- true 
    let proc = Process.Start(startInfo) 
    proc.StandardInput.WriteLine("svn log") 
    Console.ReadKey() |> ignore 
    0 

此代码,因为它是,将打印

svn: E155007: 'C:\x\y\z\bin\Debug' is not a working copy 
+0

你启动命令,或者他们已经存在的? – Joe

+0

我通过System.Diagnostics.Process启动它们。 –

回答

1

“它肯定看起来它附加的输入/输出流,以我的 程序的控制台输入/输出流“。

不正确。您可以通过myProcess.StartInfo.RedirectStandardInput告诉过程重定向stdin。 Process对象公开了访问输入/输出流的方法(例如Process.StandardInput)来读取/写入它们。

MSDN有一些体面的示例代码:

http://msdn.microsoft.com/en-us/library/system.diagnostics.process.standardinput%28v=vs.110%29.aspx

+0

如果将RedirectStandardInput/Output设置为true并尝试写入Process.StandardInput,则会在控制台上获得输出。 –

+0

您应该重定向标准输出。 – Joe

+0

我也重定向它(正如最初所述)。 –

相关问题