कुछ दुर्लभ स्थितियों में, आप परवाह कर सकते हैं कि stdin किससे जुड़ा हुआ है। अधिकतर, आपको परवाह नहीं है - आप बस stdin पढ़ते हैं।
someprocess | python myprogram.py
में, stdin एक पाइप से जुड़ा हुआ है; इस मामले में, पिछली प्रक्रिया का stdout। आप बस sys.stdin
से पढ़ते हैं और आप अन्य प्रक्रिया से पढ़ रहे हैं। [ध्यान दें कि विंडोज़ में, अभी भी (संभावित रूप से) एक कीबोर्ड के साथ "CON" डिवाइस है। यह sys.stdin
नहीं होगा।]
python myprogram.py <someFile
में, stdin फ़ाइल से जुड़ा हुआ है। आप बस sys.stdin
से पढ़ते हैं और आप फ़ाइल से पढ़ रहे हैं।
python myprogram.py
में, stdin कंसोल से जुड़े हुए हैं (/dev/ttyxx
* निक्स में)। आप sys.stdin
से सरल पढ़ते हैं और आप कीबोर्ड से पढ़ रहे हैं।
उपर्युक्त तीन मामलों में सामान्य विषय पर ध्यान दें। आप बस sys.stdin
से पढ़ते हैं और आपके प्रोग्राम का वातावरण आपके लिए सबकुछ परिभाषित करता है। आप यह देखने के लिए नहीं देखते हैं कि पढ़ने के लिए stdin पर डेटा उपलब्ध है या नहीं "। यह पहले से ही उपलब्ध है।
कभी-कभी, आप एक कीबोर्ड इंटरप्ट (या अन्य शेनानिगन्स) चाहते हैं। पायथन, बीटीडब्ल्यू, I/O तत्वों की प्रथम श्रेणी की विशेषता के रूप में एक कीबोर्ड बाधित है। कंट्रोल-सी I/O के दौरान एक बाधा उत्पन्न करता है (यह एक तंग पाश में नहीं टूट जाएगा, लेकिन यह समय-समय पर प्रिंट करने वाले प्रोग्राम को सिग्नल करेगा।)
कभी-कभी आपको यह पता लगाना होगा कि किस प्रकार की फ़ाइल stdin
से जुड़ा हुआ है ।
कुछ os.isatty(sys.stdin.fileno())
की तरह कुछ sys.stdin
एक टीटीवी है, तो आप प्रोग्राम "CON" (कीबोर्ड) से जुड़े हुए थे। यदि sys.stdin
कोई TTY नहीं है, तो यह फ़ाइल या पाइप से जुड़ा हुआ है।
उदाहरण
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.
C:\Documents and Settings\slott>python
Python 2.5.2 (r252:60911, Feb 21 2008, 13:11:45) [MSC v.1310 32 bit (Intel)] on
win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> import sys
>>> os.isatty(sys.stdin.fileno())
True
>>>
True
का मूल्य मुझसे कहता है अजगर एक फ़ाइल या पाइप संलग्न बिना चल रहा है। sys.stdin
कीबोर्ड है। विंडोज kbhit
का उपयोग करना आवश्यक नहीं है।
False
का मान मुझे बताता है कि पाइथन एक फ़ाइल या पाइप संलग्न है। sys.stdin
कीबोर्ड नहीं है। kbhit
की जांच करना सार्थक हो सकता है।इसके अलावा, मैं CON:
डिवाइस खोल सकता हूं और कीबोर्ड को सीधे पढ़ सकता हूं, sys.stdin
से अलग।
मुझे यकीन नहीं है कि आपको यह देखने के लिए क्यों चाहिए कि डेटा पढ़ने के लिए stdin पर उपलब्ध है या नहीं। यह आपके प्रश्न को अतिरिक्त विवरण के साथ अपडेट करने में मदद कर सकता है जो आप पूरा करने की कोशिश कर रहे हैं।
os.isatty (sys.stdin.fileno()) रिटर्न झूठी – awatts