मैंने देशी Win32 API का उपयोग कर एक विंडोज़ एप्लिकेशन लिखा है। मेरा ऐप अन्य प्रक्रियाओं को लॉन्च करेगा और आउटपुट कैप्चर करेगा और लाल रंग में stderr आउटपुट को हाइलाइट करेगा।क्या मैं अलग-अलग stdout/stderr को कैप्चर कर सकता हूं और मूल ऑर्डर बनाए रख सकता हूं?
इसे पूरा करने के लिए मैं stdout और stderr के लिए एक अलग पाइप बनाता हूं और CreateProcess को कॉल करते समय STARTUPINFO संरचना में उनका उपयोग करता हूं। इसके बाद मैं प्रत्येक stdout/stderr हैंडल के लिए एक अलग थ्रेड लॉन्च करता हूं जो पाइप से पढ़ता है और आउटपुट को विंडो में लॉग करता है।
यह ज्यादातर मामलों में ठीक काम करता है। मेरी समस्या यह है कि यदि बच्चे की प्रक्रिया त्वरित उत्तराधिकार में stderr और stdout पर लॉग इन करती है, तो मेरा ऐप कभी-कभी गलत क्रम में आउटपुट प्रदर्शित करेगा। मुझे लगता है कि यह प्रत्येक हैंडल से पढ़ने के लिए दो धागे का उपयोग करने के कारण है।
क्या उन दोनों के बीच अंतर करने में सक्षम होने के दौरान, मूल क्रम में stdout और stderr को कैप्चर करना संभव है?
हां, यह दृष्टिकोण है लेकिन मैं ओप को यह बताने के लिए पर्याप्त बहादुर नहीं था कि खुले मंच में ऐसा करने की कोशिश करने के लिए बहुत से वोट वोट अनिवार्य परिणाम हैं। –
यह कैसे सच हो सकता है? CMD.exe हमेशा यह सही कैसे लगता है? – paulm
ऐसा लगता है कि यह किया जा सकता है लेकिन यह जानना संभव नहीं है कि कौन सी स्ट्रीम लिखी गई थी: http://stackoverflow.com/questions/18529662/capture-process-stdout-and-stderr-in-the-correct-ordering – paulm