अन्य भाषाओं में (जैसे bash और पायथन), जब हम एक बच्चे की प्रक्रिया को जन्म देते हैं, तो यह नई प्रक्रिया माता-पिता से stdout और stderr का उत्तराधिकारी होगा। इसका मतलब है कि बाल प्रक्रिया से कोई भी आउटपुट टर्मिनल के साथ-साथ माता-पिता से आउटपुट पर मुद्रित किया जाएगा।जावा प्रक्रिया में मुख्य प्रक्रिया stdout/stderr में बाल प्रक्रिया stdout/stderr को पुनर्निर्देशित करने के लिए कैसे करें?
हम जावा में एक ही व्यवहार कैसे प्राप्त कर सकते हैं?
मेरे पहली कोशिश थी:
proc = Runtime.getRuntime().exec(cmd);
लेकिन यह काम नहीं करेगा। पर this answer और this answer आधार पर, मैं के साथ कोड बदल दिया है:
ProcessBuilder pb = new ProcessBuilder(cmd);
pb.redirectOutput(System.out);
pb.redirectError(System.err);
लेकिन यह भी संकलन नहीं करता है, के रूप में बहस की उम्मीद विधि मानकों के साथ असंगत हैं।
तुम्हारा मतलब है कि मैं करने की जरूरत है एक लूप को लागू करें जो सिर्फ एक स्ट्रीम से पढ़ता रहता है और दूसरे में लिखता रहता है? क्षमा करें, व्यवहार्य नहीं है। बहुत अधिक काम (शायद एक नए धागे में चलने की आवश्यकता है, और यह संभव बग के बहुत सारे अंक पेश करता है)। –
व्यवहार्य या यह आवश्यक नहीं था। मैंने अभी जावा 7 एपीआई की जांच की है और ऐसा लगता है कि इसे संबोधित किया गया है - अब आप रीडायरेक्ट.इनहेरिट में रीडायरेक्ट आउटपुट को कॉल कर सकते हैं जो आप चाहते हैं कि हासिल करने के लिए देखता है। – henry