2015-02-11 60 views
1

我試圖讓C#應用程序使用hunpos tagger。 乳寧hunpos-tag.exe需要三個輸入參數:型號,INPUTFILE,OUTPUTFILE如何在啓動過程之前重定向STDIN .NET過程

在CMD它會是這個樣子:

hunpos-tag.exe model <inputFile >outputFile 

如果我只是模型上運行它,它寫的東西,等待結束命令。當我嘗試使用標準重定向時,我要麼得到一個異常(我解決了這個問題,這個代碼已經被一個大括號取代了,或者我現在只是得到了這個或者場景),或者我只用模型參數就可以得到運行tagger的結果。代碼如下:

string inputFilePath = path + "\\CopyFolder\\rr"; 
string pathToExe = path + "\\CopyFolder\\hunpos-tag.exe"; 

ProcessStartInfo startInfo = new ProcessStartInfo 
    { 
     FileName = pathToExe, 
     UseShellExecute = false, 
     RedirectStandardInput = true, 
     WorkingDirectory = Directory.GetDirectoryRoot(pathToExe), 
     Arguments = path + "\\CopyFolder\\model.hunpos.mte5.defnpout", 
    }; 

try 
{ 
    Process _proc = new Process(); 
    _proc.StartInfo.FileName = pathToExe; 
    _proc.StartInfo.UseShellExecute = false; 
    _proc.StartInfo.RedirectStandardInput = true; 
    _proc.StartInfo.Arguments = path + "\\CopyFolder\\model.hunpos.mte5.defnpout"; 
    //Magic goes here 
    _proc.Start(); 

    _proc.WaitForExit(); 
} 
catch (Exception e) 
{ 
    Console.WriteLine(e); 
} 

任何想法如何在開始我的過程之前重定向輸入?

+0

什麼是異常? – 2015-02-11 17:35:52

+0

我相信你必須在開始進程後重定向,如果你想在啓動應用程序時使用這個參數,你可以傳遞多個初始參數。根據我的經驗,重定向是即時的。 – user1274820 2015-02-11 17:36:30

+0

的例外是:System.InvalidOperationException:沒有進程與此對象關聯。 – user3816378 2015-02-11 17:42:47

回答

0

它不僅需要設置RedirectStandardInputtrue但你也需要使用輸入流寫入你想要的文字:

_proc.StandardInput.WriteLine("The text you want to write"); 
1

沒有必要爲的ProcessStartInfo如果你設置信息稍後的。只是擺脫這一點。看來你已經在做你想做的事了。只是創建過程對象不會啓動過程,Process.Start會。只需製作一個新的StreamWriter並將其傳遞給Process.StandardInput(我認爲是的,它可能是其他的)

+0

當我嘗試做任何更改之前,我開始處理我得到以下內容:System.InvalidOperationException:StandardIn尚未重定向。 at System.Diagnostics.Process.get_StandardInput() at PProcess.Program.Main()in – user3816378 2015-02-11 17:48:00

+0

當然你不能在它開始之前寫入它。您只需在Process.Start() – 2015-02-11 17:54:57

+0

之後立即創建該StreamWriter就像我在上面的文本中所說的那樣,出於某種原因,它需要將輸入與參數同時傳遞。如果我在Process.Start()出於某種原因後定義它,它不會讓步。 – user3816378 2015-02-11 18:03:19