2013-04-21 16 views
16

पर रीडायरेक्ट किया गया है, मैं माता जावा प्रक्रिया के मानक आउटपुट की ओर जावा प्रक्रिया आउटपुट को रीडायरेक्ट करना चाहता हूं।प्रोसेसबिल्डर मानक आउटपुट

इस प्रकार ProcessBuilder वर्ग का उपयोग करना:

public static void main(String[] args) { 
    ProcessBuilder processBuilder = new ProcessBuilder("cmd"); 
    processBuilder.directory(new File("C:")); 
    processBuilder.redirectErrorStream(true); // redirect error stream to output stream 
    processBuilder.redirectOutput(ProcessBuilder.Redirect.INHERIT); 
} 

मैं उम्मीद है कि "cmd" है, जो की तरह हैं के आउटपुट:

माइक्रोसॉफ्ट विंडोज [संस्करण 6.1.7601] कॉपीराइट (c) 200 9 माइक्रोसॉफ्ट कॉर्पोरेशन। टॉस droits réservés।

जावा प्रोग्राम चलाने के लिए उपयोग किए गए डॉस कंसोल में प्रदर्शित होते हैं। लेकिन डॉस कंसोल में बिल्कुल कुछ भी प्रदर्शित नहीं होता है।

चर्चाओं के अन्य धागे में, मैंने बुफर्ड रीडर वर्ग का उपयोग करके समाधान देखा: लेकिन यहां मैं किसी भी बुफर्ड रीडर या "लूप पढ़ने के दौरान" मानक आउटपुट में सीधे प्रदर्शित होने की प्रक्रिया को आउटपुट करना चाहता हूं। क्या यह संभव है?

धन्यवाद।

+3

देखो: इसके अलावा आप तरीकों daisy chain कर सकते हैं (...) '। –

+0

यह काम करना चाहिए। मुझे नहीं लगता कि यह क्यों नहीं होगा। – Qix

उत्तर

11

आपको एक महत्वपूर्ण टुकड़ा याद आया, आपको वास्तव में अपनी प्रक्रिया शुरू करने और अपने आउटपुट की प्रतीक्षा करने की आवश्यकता है। मेरा मानना ​​है कि यह काम करेगा,

processBuilder.redirectOutput(ProcessBuilder.Redirect.INHERIT); 
// Start the process. 
try { 
    Process p = processBuilder.start(); 
    // wait for termination. 
    p.waitFor(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} catch (InterruptedException e) { 
    e.printStackTrace(); 
} 
+2

को स्वीकार किया जाना चाहिए उत्तर @Elliott Frisch – gumuruh

12

ProcessBuilder.inheritIO() प्रयास करें वर्तमान जावा प्रक्रिया के रूप में ही आई/ओ उपयोग करने के लिए। `Setout (...)`, `setIn (...)`, `setErr: तरीकों कि आप की आवश्यकता होगी के लिए सिस्टम वर्ग के लिए एपीआई पर

ProcessBuilder pb = new ProcessBuilder("cmd") 
    .inheritIO() 
    .directory(new File("C:")); 
pb.start(); 
+3

मेरी अपनी जानकारी के लिए सिर्फ एक फुटनोट - यदि आप 'pb.destroy()' को जल्द ही कॉल करते हैं तो आपको कुछ भी प्रिंट नहीं किया जाएगा (भले ही आप 'System.out.flush() को कॉल करें '); –

संबंधित मुद्दे