टी एल; डॉ
inputपायथन 2.7 में कार्य, पायथन अभिव्यक्ति के रूप में आपके जो कुछ भी दर्ज करता है, उसका मूल्यांकन करता है। यदि आप केवल स्ट्रिंग्स पढ़ना चाहते हैं, तो raw_inputपायथन 2.7 में फ़ंक्शन का उपयोग करें , जो रीड स्ट्रिंग्स का मूल्यांकन नहीं करेगा।
यदि आप पायथन 3.x का उपयोग कर रहे हैं, तो raw_inputइसका नाम बदल दिया गया है input। पायथन 3.0 रिलीज़ नोट का हवाला देते हुए ,
raw_input()का नाम बदल दिया गया input()। यही है, नए input()फ़ंक्शन से एक पंक्ति पढ़ता है sys.stdinऔर पीछे छोड़ी गई नई लाइन के साथ इसे वापस करता है। EOFErrorयदि इनपुट समय से पहले समाप्त हो जाता है तो यह बढ़ जाता है। के पुराने व्यवहार को प्राप्त करने के लिए input(), का उपयोग करेंeval(input())
पायथन 2.7 में , दो कार्य हैं जिनका उपयोग उपयोगकर्ता इनपुट को स्वीकार करने के लिए किया जा सकता है। एक है inputऔर दूसरा है raw_input। आप उन दोनों के बीच संबंध के बारे में सोच सकते हैं
input = eval(raw_input)
इसे बेहतर समझने के लिए कोड के निम्नलिखित टुकड़े पर विचार करें
>>> dude = "thefourtheye"
>>> input_variable = input("Enter your name: ")
Enter your name: dude
>>> input_variable
'thefourtheye'
inputउपयोगकर्ता से एक स्ट्रिंग को स्वीकार करता है और वर्तमान पायथन संदर्भ में स्ट्रिंग का मूल्यांकन करता है। जब मैं dudeइनपुट के रूप में टाइप करता हूं , तो यह पता चलता है कि यह dudeमूल्य के लिए बाध्य है thefourtheyeऔर इसलिए मूल्यांकन का परिणाम बन जाता है thefourtheyeऔर इसे सौंपा जाता है input_variable।
यदि मैं कुछ और दर्ज करता हूं जो वर्तमान अजगर के संदर्भ में नहीं है, तो यह विफल हो जाएगा NameError।
>>> input("Enter your name: ")
Enter your name: dummy
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "<string>", line 1, in <module>
NameError: name 'dummy' is not defined
पायथन 2.7 के साथ सुरक्षा विचार input:
चूंकि जो भी उपयोगकर्ता प्रकारों का मूल्यांकन किया जाता है, वह सुरक्षा मुद्दों को भी लागू करता है। उदाहरण के लिए, यदि आपने पहले से ही osअपने प्रोग्राम में मॉड्यूल लोड किया हुआ है import os, और फिर उपयोगकर्ता टाइप करते हैं
os.remove("/etc/hosts")
यह अजगर द्वारा एक फ़ंक्शन कॉल अभिव्यक्ति के रूप में मूल्यांकन किया जाएगा और इसे निष्पादित किया जाएगा। यदि आप एलिवेटेड विशेषाधिकारों के साथ पायथन को निष्पादित कर रहे हैं, तो /etc/hostsफ़ाइल हटा दी जाएगी। देखें, यह कितना खतरनाक हो सकता है?
इसे प्रदर्शित करने के लिए, चलिए inputफ़ंक्शन को फिर से निष्पादित करने का प्रयास करते हैं।
>>> dude = "thefourtheye"
>>> input("Enter your name: ")
Enter your name: input("Enter your name again: ")
Enter your name again: dude
अब, जब input("Enter your name: ")निष्पादित किया जाता है, तो यह उपयोगकर्ता इनपुट का इंतजार करता है और उपयोगकर्ता इनपुट एक वैध पायथन फ़ंक्शन मंगलाचरण है और इसलिए इसे भी आमंत्रित किया जाता है। यही कारण है कि हम Enter your name again:फिर से शीघ्र देख रहे हैं ।
तो, आप raw_inputइस तरह से फ़ंक्शन के साथ बेहतर हैं
input_variable = raw_input("Enter your name: ")
यदि आपको परिणाम को किसी अन्य प्रकार में बदलने की आवश्यकता है, तो आप वापस लौटे स्ट्रिंग को परिवर्तित करने के लिए उपयुक्त कार्यों का उपयोग कर सकते हैं raw_input। उदाहरण के लिए, पूर्णांक के रूप में इनपुट को पढ़ने के लिए, intफ़ंक्शन का उपयोग करें , जैसे इस उत्तर में दिखाया गया है ।
अजगर 3.x में , उपयोगकर्ता इनपुट प्राप्त करने के लिए केवल एक ही फ़ंक्शन है और इसे कहा जाता है input, जो कि पायथन 2.7 के बराबर है raw_input।
inputइस तरह से व्यवहार करने की उम्मीद करूंगा , लेकिन केवल 2.7 में। जब आपpython --versionकमांड प्रॉम्प्ट से चलते हैं तो यह क्या कहता है ? वैकल्पिक रूप से, यदि आपimport sys; print(sys.version)अपनी स्क्रिप्ट की शुरुआत में लिखते हैं तो क्या होगा ?