टी एल; डॉ
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)
अपनी स्क्रिप्ट की शुरुआत में लिखते हैं तो क्या होगा ?