मैंने इस पर कुछ समय बिताया और सफल हुआ। मैंने शोध के दौरान इस ब्लॉग को पाया, और वापस आने का फैसला किया और अगले व्यक्ति को कुछ समय बचाने के लिए मेरा समाधान प्रदान किया। मैं एक झूठे ईमेल वाले अतिथि के रूप में प्रतिक्रिया दे रहा हूं इसलिए मैं बातचीत नहीं करूँगा, लेकिन कोई और जानकारी की आवश्यकता नहीं है।
जुला 18 '12 पर 19:41 हैरी जॉनसन पर लिखा है:
"सिद्धांत रूप में, यदि आप जानते हैं उम्मीद करना कितना डेटा, आप कंसोल एपीआई कार्यों का उपयोग आवेदन लिखने के लिए एक सांत्वना बनाने के लिए कर सकता है करने के लिए, और फिर कंसोल से आउटपुट पढ़ें। लेकिन आप जावा से ऐसा नहीं कर सकते हैं, आपको इसे करने के लिए आपको एक सी एप्लीकेशन लिखना होगा। "
बात यह है कि पहले से ही एक उपयोगिता है जो यह करता है। यह थोड़ा अलग उपयोग के लिए लिखा गया है, लेकिन इसे वांछित परिणाम प्रदान करने में लगाया जा सकता है। इसका उद्देश्य उद्देश्य एक विंडोज कंसोल ऐप को लिनक्स स्टाइल टीटी टर्मिनल के साथ बातचीत करने में सक्षम बनाना है। यह एक छिपे हुए कंसोल को चलाकर करता है और कंसोल बफर को सीधे एक्सेस करता है। यदि आपने इसका उपयोग करने की कोशिश की - तो आप असफल हो जाएंगे। मैं भाग्यशाली हो गया और पाया कि इस उपयोगिता के लिए अनियंत्रित स्विच हैं जो इसे सरल unbuffered आउटपुट प्रदान करने की अनुमति देगा। स्विच के बिना यह त्रुटि के साथ विफल रहता है - आउटपुट पाइप आउटपुट की कोशिश करते समय आउटपुट एक tty नहीं है।
उपयोगिता को Winpty कहा जाता है। आप इसे यहाँ प्राप्त कर सकते हैं:
https://github.com/rprichard/winpty/releases
अप्रलेखित स्विच यहां उल्लेख कर रहे हैं:
https://github.com/rprichard/winpty/issues/103
मैं MSYS2 संस्करण का उपयोग कर रहा हूँ। इसका उपयोग करने के लिए आपको msys-2.0.dll की आवश्यकता होगी।
सीधे शब्दों में चलाएँ:
winpty.exe -Xallow-non-tty -Xplain your_program.exe | receive_unbuffered_output.exe
-Xallow-non-tty
, पाइप उत्पादन
-Xplain
की अनुमति देगा, जोड़ा लिनक्स टर्मिनल मुक्ति कोड निकाल देंगे (या वे कहा जाता है जो कुछ भी)
आवश्यक फ़ाइलों में कर रहे हैं:
winpty.exe
winpty-agent.exe
winpty.dll
msys-2.0.dll
winpt y-debugserver.exe - आवश्यक नहीं
कोई समकक्ष नहीं है। विंडोज में छद्म टर्मिनलों नहीं हैं। –
@ हैरी जोहानस्टन हाय हैरी, मैं बाहरी आदेशों को निष्पादित करने के लिए जावा का उपयोग करना चाहता हूं और 'वास्तविक समय में' stdout आउटपुट को पढ़ना चाहता हूं। कुछ .exe प्रोग्राम मुझे stdout बफरिंग की वजह से समस्या दे रहे हैं। जब प्रोग्राम अभी भी चल रहा है तो मुझे कोई स्टडआउट आउटपुट नहीं मिला। जब कार्यक्रम समाप्त हो जाता है, तो मुझे अचानक बहुत सारे स्टडआउट आउटपुट मिलते हैं। (यह प्रोग्राम वास्तविक समय stdout आउटपुट उत्पन्न करने में सक्षम है जब मैं इसे मैन्युअल रूप से कमांड प्रॉम्प्ट विंडो में चलाता हूं) यदि Windows में कोई छद्म टर्मिनल नहीं है तो मैं इस समस्या को कैसे हल कर सकता हूं? – userpal
यह ऑपरेटिंग सिस्टम नहीं है जो बफरिंग करता है, यह एप्लिकेशन है। आपको .exe प्रोग्राम को प्रश्न में ठीक करने की आवश्यकता होगी ताकि वे अपने आउटपुट को बफर न करें। –