गो में, बाहरी कमांड निष्पादित करना और उनके इनपुट और आउटपुट को प्रबंधित करना एक सामान्य कार्य है। हालाँकि, उपयोगकर्ता इनपुट के लिए संकेत देने वाले कमांड, जैसे "लॉगिन" से निपटते समय, इन इनपुट को प्रोग्रामेटिक रूप से स्वचालित करना चुनौतीपूर्ण हो सकता है।
इस समस्या का एक तरीका सीधे कमांड के मानक इनपुट (stdin) पर लिखना है ) बाइट्स बफ़र का उपयोग करना। आइए प्रदान किए गए समाधान पर गौर करें:
login := exec.Command(cmd, "login")
var b bytes.Buffer
b.Write([]byte(username "\n" pwd "\n"))
login.Stdout = os.Stdout
login.Stdin = &b
login.Stderr = os.Stderr
इस कोड में, हम b नामक एक बाइट्स.बफ़र बनाते हैं और उपयोगकर्ता नाम और पासवर्ड को न्यूलाइन्स के साथ जोड़ते हैं। इसके बाद हम लॉगिन कमांड के स्टडिन फ़ील्ड में बी असाइन करते हैं, बफर को कमांड के इनपुट स्ट्रीम से प्रभावी ढंग से जोड़ते हैं।
जब कमांड निष्पादित होता है, तो यह बी से वर्णों को तब तक पढ़ेगा जब तक कि यह एक नई लाइन का सामना नहीं करता है, इसे उपयोगकर्ता नाम के रूप में व्याख्या करता है। इसके बाद इसे पासवर्ड मानकर अगली नई लाइन तक पढ़ा जाएगा। इस तरह से बफ़र को मैन्युअल रूप से लिखकर, हम उपयोगकर्ता इंटरैक्शन की आवश्यकता को दरकिनार कर देते हैं और प्रोग्रामेटिक रूप से आवश्यक इनपुट प्रदान करते हैं।
याद रखें, stdin एक कैरेक्टर बफ़र है, और कमांड आमतौर पर इनपुट पढ़ते हैं जब तक कि वे नई लाइनों का सामना नहीं करते। यह तकनीक आपको बाहरी कमांडों को फीड करने से पहले इनपुट को बफर और अनुक्रमित करने की अनुमति देती है, जिससे मैन्युअल उपयोगकर्ता के हस्तक्षेप की आवश्यकता के बिना इनपुट प्रक्रिया स्वचालित हो जाती है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3