2016-09-24 3 views
0

Я встречаюсь с необъяснимым поведением при попытке чтения вновь порожден результата процесса -В противном случае, чтобы получить конечный результат процесса с #

Это код, я использую:

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

Вы можете попробовать очистить 'planWriter' перед чтением из' m_planStream' – Pezo

ответ

1

Вы должны очистить planWriter перед чтением из m_planStream.

Смежные вопросы