2013-05-07 4 views
0

У меня проблема с чтением данных из процесса StandardOutput в C#. Вот что у меня есть:Проблема с перенаправлением процесса перенаправления стандартного вывода

var hdd = new System.Diagnostics.Process(); 
hdd.StartInfo.FileName = "C:\\Program Files\\Java\\jre7\\bin\\java.exe"; 
hdd.StartInfo.Arguments = "-jar minecraft.jar"; 
hdd.StartInfo.RedirectStandardOutput = true; 
hdd.StartInfo.UseShellExecute = false; 
hdd.Start(); 
while (!hdd.StandardOutput.EndOfStream) 
{ 
    string data = hdd.StandardOutput.ReadLine(); 
    Console.WriteLine(">> " + data); 
} 

А вот у меня есть второй код, написанный на Python:

cmd = '"C:\\Program Files\\Java\\jre7\\bin\\java.exe" -jar minecraft.jar' 
import subprocess 
p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE) 
while True: 
    line = p.stdout.readline() 
    print '>> ', line.strip() 
    if line == '' and p.poll() != None: 
     break 

Проблема заключается в том, что оба кода работают, но в питоне, скрипт печатает примерно в два раза больше информации, чем C#.

C выход #:

>> 229 recipes 
>> 27 achievements 
>> 
>> Starting up SoundSystem... 
>> Initializing LWJGL OpenAL 
>>  (The LWJGL binding of OpenAL. For more information, see http://www.lwjgl.org) 
>> OpenAL initialized. 

выход в Python:

>> 229 recipes 
>> 27 achievements 
2013-05-07 18:57:12 [CLIENT] [INFO] LWJGL Version: 2.4.2 
>> 
>> Starting up SoundSystem... 
>> Initializing LWJGL OpenAL 
>> (The LWJGL binding of OpenAL. For more information, see http://www.lwjgl.or 
g) 
>> OpenAL initialized. 
>> 
2013-05-07 18:57:14 [CLIENT] [INFO] Found animation info for: textures/blocks/lava_flow.txt 
2013-05-07 18:57:14 [CLIENT] [INFO] Found animation info for: textures/blocks/water_flow.txt 
2013-05-07 18:57:14 [CLIENT] [INFO] Found animation info for: textures/blocks/fire_0.txt 
7 more lines similar to last 3 above 

Таким образом, мы можем ясно видеть, некоторые из информаций не хватает в C#. В частности, строки без «>>» выводятся из pythons. Есть ли способ, я могу поймать эти недостающие строки на C#?

+0

Может ли это быть отладочный вывод, который записывается python? Если вы [загрузите и запустите 'DbgView'] (http://technet.microsoft.com/en-gb/sysinternals/bb896647.aspx) и запустите его и оставьте его запущенным во время запуска программы C#, вы видите что-нибудь похожее в окне DbgView? –

+0

@Matthew Watson - Как-то я не могу получить какой-либо фактический результат. В нем говорится [4516] FMAPO: функция отладки отключена (DbgView запущен как администратор, не имеет значения, если я отлаживаю или запускаю приложение вручную) –

ответ

1

Я думаю (предположение), вы должны установить RedirectStandardError = true; кажется, что эта дополнительная информация переходит к стандартной ошибке. Вы можете использовать ErrorDataReceived для обработки этих строк.

+0

Все, я не могу поверить, что это было так просто :(Сделал и работал, это проходило to StandardError действительно. Спасибо! –

+0

Я счастлив, что помог; :) –