2010-04-10 13 views
5

मेरे पास एक मॉड्यूल है जो किसी प्रक्रिया के मानक त्रुटि को पढ़ता है। सबकुछ ठीक काम करता है, लेकिन मैं कुछ अलग करना चाहता हूं। मैं देशी तरीका की तरह stdin पुनर्निर्देशित करने के लिए पता नहीं कैसे:किसी अन्य ऐप के stdin पर कैसे लिखें?

app1.exe -someargs | app2.exe -someargs

कहाँ APP2 अपने stdin में APP1 के सभी stdout पढ़ता है।

+0

इस उत्तर आप एक अच्छा विचार देना चाहिए (http://stackoverflow.com/questions/ [सी # कंसोल पाइप के साथ इनपुट प्राप्त] 199528/सी-कंसोल-प्राप्त-इनपुट-साथ-पाइप) –

+0

लेकिन दूसरा आवेदन मेरे द्वारा नहीं लिखा गया है। मुझे उप-प्रोसेस पर बाइट्स भेजने की ज़रूरत है, उन्हें प्राप्त नहीं करें। – blez

+0

@blez, यह बहुत स्पष्ट होना चाहिए। लेखन पढ़ने के विपरीत है। जहां लिंक किया गया उत्तर आपको कंसोल से पढ़ने के लिए कहता है, तो आप कंसोल पर लिखते हैं। –

उत्तर

3

निम्नलिखित के लिए MSDN संदर्भ दस्तावेज़ पर एक नज़र डालें (दोनों System.Diagnostics नाम स्थान में पाया जा सकता):

अपने विशेष उदाहरण के लिए, आप निम्न तरीके से चीजों की स्थापना की है:

  1. APP1 शुरू होता है APP2 एक बच्चे प्रक्रिया Process वर्ग (ऊपर दिए गए लिंक देखें) का उपयोग के रूप में।

  2. APP1APP2 के साथ जुड़े Process वस्तु की .StandardInput धारा को लिख कर APP2 के मानक इनपुट करने के लिए लिखता है।

  3. ऐप 2 बस अपने मानक इनपुट से लाइनें पढ़ता है (उदाहरण के लिए Console.ReadLine() के माध्यम से)।

8

एक बार जब आप Process वस्तु प्रक्रिया आप (क्योंकि या तो आप इसे ओएस से मिला स्थिर विधि Process.GetProcesses का उपयोग कर, या क्योंकि आप इसे स्वयं बनाया है), तो आप Process.StandardInput संपत्ति के लिए एक StreamWriter संलग्न कर सकते हैं साथ बातचीत करना चाहते का प्रतिनिधित्व करने के लिए है और प्रक्रिया के stdin को लिखने के लिए इसका उपयोग करें। पर अपनी नव निर्मित प्रक्रिया पर ProcessStartInfo.RedirectStandardInput सेट करना न भूलें।

संबंधित नोट पर, आप आउटपुट पढ़ने के लिए Process.StandardOutput पर StreamReader का उपयोग कर सकते हैं (जैसे StandardError से पढ़ना)।

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