TL; DR
input
Python 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.stdin
ve satır sonundaki yeni satır çıkarılır. EOFError
Giriş 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 input
diğ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'
input
kullanıcıdan bir dize kabul eder ve dizeyi geçerli Python bağlamında değerlendirir. Ben dude
girdi olarak yazdığımda dude
, değere bağlı olduğunu thefourtheye
ve böylece değerlendirmenin sonucu olur thefourtheye
ve 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, os
programınıza modülü önceden yüklediyseniz import os
ve 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/hosts
dosya silinecektir. Bakın, ne kadar tehlikeli olabilir?
Bunu göstermek için, input
fonksiyonu 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_input
fonksiyonla 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 input
Python 2.7'lere eşdeğer denir raw_input
.
input
Bu şekilde davranmayı beklerdim , ama sadece 2.7'de.python --version
Bir komut isteminden çalıştırdığınızda ne diyor ? Alternatif olarak,import sys; print(sys.version)
senaryonuzun başına yazarsanız ne olur ?