0

C# のプロセス StandardOutput からのデータの読み取りに問題があります。ここに私が持っているものがあります:

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 で書かれた 2 番目のコードがあります。

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

問題は、両方のコードが機能していることですが、Python では、スクリプトは C# の約 2 倍の情報を出力します。

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# で欠落している行をキャッチする方法はありますか?

4

1 に答える 1

1

私は(推測で)あなたも設定すべきだと思いますRedirectStandardError = true。これらの追加情報が標準エラーに渡されているようです。ErrorDataReceivedこれらの行の処理に使用できます。

于 2013-05-07T17:50:51.720 に答える