2016-09-24 1 views
0

cをプロセス出力を取得するために失敗 - これは私が使用していたコードである新しく生成されたプロセス出力を読み取ろうとするとき、私は原因不明の行動を満たしています。#

:それは非常に簡単です

p.StartInfo.Arguments += "-o Kd.pddl -f Kp.pddl";   
    StreamWriter planeWriter = new StreamWriter(m_planStream); 
    p.StartInfo.UseShellExecute = false; 
    p.StartInfo.RedirectStandardOutput = true; 
    p.OutputDataReceived += new DataReceivedEventHandler(OutputHandler); 
    p.OutputDataReceived += (sender, args) => planeWriter.WriteLine(args.Data); 
    p.Start(); 

    p.BeginOutputReadLine(); 
    p.WaitForExit(); 
    m_planStream.Position = 0; 
    StreamReader planReader = new StreamReader(m_planStream); 
    m_sFFOutput = planReader.ReadToEnd(); 
    List<string> lPlan = new List<string>(); 
    Console.WriteLine(m_sFFOutput); 

、およびほとんどの出力のために、それは私がこれが説明できないと言う理由です。

私は毎回異なる入力(Kd.pddlとKp.pddl)でプログラムをロードしています。いくつかの入力については すべて正常に動作しますが、一部の入力では出力を得ることができません。 私はそれを手動でも実行したので、どんな場合でも出力があり、異なる出力を持つ異なる入力に対して、出力を取り出すことができます。

私がスティックして引数に誤りがあっても、プログラムの出力が得られます。

これについていくつかの洞察を使うことができましたが、私はC#ではなく新しいです。

例出力のために、私は(プログラムの手動実行を通してこれを得た)を取得することができません:

ff: parsing domain file 
domain 'KTRIANGLE_TIREWORLD_POMDP' defined 
... done. 
ff: parsing problem file 
problem 'KTRIANGLE_TIREWORLD_INST_POMDP__1' defined 
... done. 



Cueing down from goal distance: 3 into depth [1] 
            2   [1] 
            1   [1] 
            0 

ff: found legal plan as follows 

step 0: MOVE_CAR__LA1A1_LA1A2 
     1: MOVE_CAR__LA1A2_LA1A3 
     2: CHANGETIRE 


time spent: 0.00 seconds instantiating 44 easy, 0 hard action templates 
       0.00 seconds reachability analysis, yielding 19 facts and 44 actions 
       0.00 seconds creating final representation with 18 relevant facts 
       0.00 seconds building connectivity graph 
       0.00 seconds searching, evaluating 4 states, to a max depth of 1 
       0.00 seconds total time 

と私はバグに引数をランダムに文字を貼り付けたときに、私はこの出力を取得しています、私それを取得することができる午前:

usage of ff: 

OPTIONS DESCRIPTIONS 

-p <str> path for operator and fact file 
-o <str> operator file name 
-f <str> fact file name 

-i <num> run-time information level(preset: 1) 
     0  only times 
     1  problem name, planning process infos 
    101  parsed problem data 
    102  cleaned up ADL problem 
    103  collected string tables 
    104  encoded domain 
    105  predicates inertia info 
    106  splitted initial state 
    107  domain with Wff s normalized 
    108  domain with NOT conds translated 
    109  splitted domain 
    110  cleaned up easy domain 
    111  unaries encoded easy domain 
    112  effects multiplied easy domain 
    113  inertia removed easy domain 
    114  easy action templates 
    115  cleaned up hard domain representation 
    116  mixed hard domain representation 
    117  final hard domain representation 
    118  reachability analysis results 
    119  facts selected as relevant 
    120  final domain and problem representations 
    121  connectivity graph 
    122  fixpoint result on each evaluated state 
    123  1P extracted on each evaluated state 
    124  H set collected for each evaluated state 
    125  False sets of goals <GAM> 
    126  detected ordering constraints leq_h <GAM> 
    127  the Goal Agenda <GAM> 

-d <num> switch on debugging 
+0

起動しているプログラムが常に標準出力に書き込むのですか、代わりに標準エラーに書き込むことがありますか?それはなぜあなたが何も得られない理由を説明するでしょう。 – Pezo

+0

いいえ、いつも標準ですが、「作業中」と「作業出力」の間にある唯一の違いは、動作するものは少し長くなりますが、5行程度しか長くないことです。 また、常に出力されます。 –

+1

'm_planStream'から読み込む前に' planWriter'をフラッシュしてみることができます – Pezo

答えて

1

あなたはm_planStreamから読む前にplanWriterフラッシュする必要があります。

関連する問題