TL; DR
inputPython 2.7'deki işlev, girdiğiniz her şeyi bir Python ifadesi olarak değerlendirir. Dizeleri okumak istiyorsanız raw_input, Python 2.7'de okuma dizelerini değerlendirmeyecek bir işlev kullanın .
Python 3.x kullanıyorsanız raw_input, olarak yeniden adlandırıldı input. Python 3.0 sürüm notlarından alıntı yapmak ,
raw_input()olarak yeniden adlandırıldı input(). Yani, yeni input()işlev bir satır okur sys.stdinve satır sonundaki yeni satır çıkarılır. EOFErrorGiriş zamanından önce sonlandırılırsa yükselir . Eski davranışını elde etmek input()içineval(input())
Python 2.7'de , kullanıcı girişlerini kabul etmek için kullanılabilecek iki işlev vardır. Biri inputdiğeri raw_input. Aralarındaki ilişkiyi aşağıdaki gibi düşünebilirsiniz
input = eval(raw_input)
Bunu daha iyi anlamak için aşağıdaki kod parçasını düşünün
>>> dude = "thefourtheye"
>>> input_variable = input("Enter your name: ")
Enter your name: dude
>>> input_variable
'thefourtheye'
inputkullanıcıdan bir dize kabul eder ve dizeyi geçerli Python bağlamında değerlendirir. Ben dudegirdi olarak yazdığımda dude, değere bağlı olduğunu thefourtheyeve böylece değerlendirmenin sonucu olur thefourtheyeve atanır bulur input_variable.
Geçerli python bağlamında olmayan başka bir şey girersem, başarısız olur 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
Python 2.7'lerle ilgili güvenlik hususları input:
Hangi kullanıcı türü değerlendirilirse değerlendirilsin, güvenlik sorunları da getirir. Örneğin, osprogramınıza modülü önceden yüklediyseniz import osve kullanıcı
os.remove("/etc/hosts")
bu, python tarafından bir işlev çağrısı ifadesi olarak değerlendirilecek ve yürütülecektir. Yükseltilmiş ayrıcalıklarla Python yürütüyorsanız, /etc/hostsdosya silinecektir. Bakın, ne kadar tehlikeli olabilir?
Bunu göstermek için, inputfonksiyonu tekrar çalıştırmayı deneyelim .
>>> dude = "thefourtheye"
>>> input("Enter your name: ")
Enter your name: input("Enter your name again: ")
Enter your name again: dude
Şimdi, input("Enter your name: ")yürütüldüğünde, kullanıcı girişini bekler ve kullanıcı girişi geçerli bir Python işlevi çağırmadır ve böylece çağrılır. Bu yüzden Enter your name again:tekrar istem görüyoruz .
Yani, raw_inputfonksiyonla daha iyi durumdasınız , böyle
input_variable = raw_input("Enter your name: ")
Sonucu başka bir türe dönüştürmeniz gerekiyorsa, döndürülen dizeyi dönüştürmek için uygun işlevleri kullanabilirsiniz raw_input. Örneğin, girdileri tamsayı olarak okumak için int, bu cevapta gösterildiği gibi işlevi kullanın .
Python 3.x'te , kullanıcı girişlerini almak için yalnızca bir işlev vardır ve buna inputPython 2.7'lere eşdeğer denir raw_input.
inputBu şekilde davranmayı beklerdim , ama sadece 2.7'de.python --versionBir komut isteminden çalıştırdığınızda ne diyor ? Alternatif olarak,import sys; print(sys.version)senaryonuzun başına yazarsanız ne olur ?