我有一個讀取進程的StandardError的模塊。一切正常,但我想做一些不同的事情。我不知道如何重定向標準輸入,如土辦法:如何寫入另一個應用程序的標準輸入?
app1.exe -someargs | app2.exe -someargs
凡APP2 APP1讀取所有標準輸出在其標準輸入。
我有一個讀取進程的StandardError的模塊。一切正常,但我想做一些不同的事情。我不知道如何重定向標準輸入,如土辦法:如何寫入另一個應用程序的標準輸入?
app1.exe -someargs | app2.exe -someargs
凡APP2 APP1讀取所有標準輸出在其標準輸入。
看一看,有如下MSDN的參考文檔(包括在System.Diagnostics
命名空間中找到):
ProcessStartInfo.RedirectStandardInput
。
有一個示例顯示如何啓動子進程並直接寫入其標準輸入。
爲了您的具體的例子,這裏是你如何設置的東西了:
APP1開始APP 2爲使用Process
類(見上面的鏈接)一個子進程。
APP1通過寫入與APP2相關聯的Process
對象的.StandardInput
流寫入到APP2的標準輸入。
app2只是從其標準輸入中讀取行(例如通過Console.ReadLine()
)。
一旦你有一個代表你想(使用,因爲您從OS得到了它的靜態方法Process.GetProcesses
,還是因爲你自己創建它),你可以將一個StreamWriter
到Process.StandardInput
財產進行溝通的過程中Process
對象並用它寫入進程的標準輸入。不要忘記在新創建的進程上將ProcessStartInfo.RedirectStandardInput
設置爲true
。
在相關說明中,您可以使用Process.StandardOutput
上的StreamReader
來讀取輸出(如從StandardError
讀取)。
我不得不使用的BinaryWriter,這篇文章解釋了所有: BinaryWriter and StdIn
這個答案應該給你一個不錯的主意[C#控制檯接收與管道輸入(http://stackoverflow.com/questions/ 199528/c-console-receive-input-with-pipe) – 2010-04-10 11:19:36
但是第二個應用程序不是由我寫的。我需要發送字節到子進程,而不是接收它們。 – blez 2010-04-10 11:23:16
@blez,它應該是非常明顯的。寫作與閱讀相反。如果鏈接的答案告訴您從控制檯讀取,則可以寫入控制檯。 – 2010-04-10 11:34:36