इस विषम ध्वनि शीर्षक के लिए खेद है ...स्ट्रीम में "एंटर कुंजी दबाएं" कैसे लिखें?
मेरे पास निम्न स्थिति है: मैं चाहता हूं कि मेरा जावा प्रोग्राम बाहरी कंसोल से बातचीत करे। उस कंसोल पर अलग-अलग आदेशों को "भेजने" के लिए, मुझे सामान्य कंसोल पर "एंटर दबाए गए" को अनुकरण करने की आवश्यकता है। मैं जो चाहता हूं उसे स्पष्ट करने के लिए, कल्पना करें कि MySQL के पास कोई अन्य एपीआई नहीं है और मुझे कंसोल के माध्यम से बातचीत करने की आवश्यकता होगी। हालांकि यह मेरी वास्तविक समस्या नहीं है, यह काफी करीब है।
मैं निम्नलिखित कोड है:
String command = "/usr/local/mysql/bin/mysql";
Process child = Runtime.getRuntime().exec(command);
StreamGobbler gobbler = new StreamGobbler(child.getInputStream());
gobbler.start();
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(child.getOutputStream()));
out.write("help");
// here enter key needs to be pressed
out.flush();
// out.close();
तो out.close()
को कॉल निष्पादित, सब कुछ ठीक है। लेकिन निश्चित रूप से, इस तरह से मैं केवल एक ही आदेश भेज सकता हूं, जो मैं नहीं चाहता हूं। लेकिन अगर out.close()
छोड़ा गया है, तो दूसरा प्रोग्राम कभी भी कमांड निष्पादित नहीं करता है। मेरा अनुमान है कि यह अभी भी "खत्म" करने के लिए आदेश की प्रतीक्षा करता है, जो सामान्य कंसोल पर एंटर दबाकर किया जाएगा। out.write(System.getProperty("line.separator"));
और out.newLine();
(जो समान हैं) समस्या को हल नहीं करते हैं, न ही out.write("\r\n");
और out.write((char) 26);
(EOF)।
बेशक, यह हो सकता है कि मैं इसे पूरी तरह से गलत कर रहा हूं (यानी गलत दृष्टिकोण)। तो मैं सही दिशा में एक सूचक की सराहना करता हूं ...
इस अत्यधिक सराहना की कोई मदद।
आपको मानक आउटपुट ** और ** मानक त्रुटि आउटपुट स्ट्रीम का उपभोग करना चाहिए। इन धाराओं पर आपको क्या मिलता है? –
आप किस प्रणाली पर हैं? आप यूनिक्स पथ का उपयोग करते हैं, लेकिन विंडोज ईओएफ (Ctrl-Z = 26) का प्रयास किया? यूनिक्स ईओएफ Ctrl-D (= 4) है, लेकिन यह निश्चित रूप से भेजने के लिए सही बात नहीं है। –
@ मार्क पीटर्स: क्षमा करें, मुझे त्रुटि आउटपुट स्ट्रीम के लिए भी एक गोबेलर जोड़ा जाना चाहिए था, लेकिन दोनों धाराओं को कुछ भी प्राप्त नहीं होता है जब तक कि 'out.close()' को इंगित नहीं किया जाता है। @ सेर्गेई टेचेनोव: मैं मैक पर काम करता हूं, और Ctrl-D या तो काम नहीं करता है, लेकिन इसे इंगित करने के लिए धन्यवाद। – roesslerj