Yapılabilir mi bilmediğim bir konu var aklımda. Kısa bir süredir araştırıyorum fakat bulamadım.
Kullanıcıya şifre girebilmesi için 10 saniye tanıma adlı konuda şöyle bir sıkıntı gördüm bunu da ayrı bir konu olarak anlatmak istedim.
Sıkıntı şu : Kullanıcı için 10 saniye tanımlanıyor fakat kullanıcı 10 saniye boyunca şifreyi girmiyor. Ardından şifreyi girmeyi denediğinde uygulama girdi girmediniz diyerek kendini kapatıyor. Benim istediğim ise kullanıcı 10 saniye boyunca şifreyi girmezse kullanıcıdan girdi almayı kesip herhangi bir girdi girmediniz diyerek kendini kapatması.
NOT : Kullanıcı için 10 saniye tanımlamadaki kodlarda kullanıcı girdi girmeden uygulamadan çıkış yapmıyor. Ben ise kullanıcı girdisi olmadan çıkmasını istiyorum.
from threading import Timer
import signal
cevap = None
sure_doldu_mu = False
def kontrol():
global cevap, sure_doldu_mu, control_thread
sure_doldu_mu = True
if cevap is None:
print("cevap girilmedi")
signal.pthread_kill(control_thread.ident, signal.SIGTERM)
def cevap_bulundu_mu(veri):
global sure_doldu_mu
if veri == "yazbel":
print("doğru cevap")
else:
print("yanlış cevap")
control_thread = Timer(5, kontrol)
control_thread.start()
cevap = input("şifre gir: ")
control_thread.cancel()
cevap_bulundu_mu(cevap)
signal.pthread_kill işinizi görecektir.Kötü çözüm, ama çözüm mü çözüm
10 saniye bekledikten sonra Enter’a bastım ve sonuç bu:
Traceback (most recent call last):
File "C:\Program Files (x86)\Python37-32\lib\threading.py", line 917, in _bootstrap_inner
self.run()
File "C:\Program Files (x86)\Python37-32\lib\threading.py", line 1158, in run
self.function(*self.args, **self.kwargs)
File "C:\Users\Wyren\Desktop\deneme.py", line 12, in kontrol
signal.pthread_kill(control_thread.ident, signal.SIGTERM)
AttributeError: module 'signal' has no attribute 'pthread_kill'
Not : Yine istediğim gibi olmamış. Kullanıcı girdisi almadan kapatmaya çalışmıyor.
Edit : Cevap girmediğim zaman uygulamanın verdiği cevap şu : cevap girilmediyanlış cevap
böyle küçük bir hata daha oldu.
@Wyren , sonuç nasıl böyle oluyor ya, py kaç kullanıyorsun sen? Ben cevabı qpython üzerinden verdim. Çalışması gerekir.
Düzeltme: py versiyonuyla değil, işletim sistemiyle alakalı gibi görünüyor. Sen win kullanıyorsun, ama ben linux kullanıyorum, sorun bundan kaynaklanıyor olabilir.Başka bir cevap varsa ben de ilgiliyim.
Dediğinizi yapmanın milyon tane yolu var, ancak ben en basiti en iyisi anlayışında olduğum için stackoverflowdaki en beğendiğim kod bloğunu yazıyorum.Nerede kullanacaksanız ona göre ilgili değişiklikleri yapabilirsiniz.Kodlar çok yalın olduğundan açıklamaları yazma gereği duymadım ama anlaşılmayan yer olursa yardımcı olmaya çalışırım.
kaynak:https://stackoverflow.com/questions/1335507/keyboard-input-with-timeout-in-python
from time import sleep
print('Please provide input in 10 seconds! (Hit Ctrl-C to start)')
try:
for i in range(0,10):
sleep(1) # could use a backward counter to be preeety :)
print('No input is given.')
except KeyboardInterrupt:
raw_input('Input x:')
print('You, you! You know something.')
Konuyu çözdüğünü görmüştüm ben de aslında ama yazışmalar devam edince herkes bir algoritma ile konuya devam ediyor ben de bir iki bir şeyler yazayım dedim
signal modülü linux da çalışıyor ama sen windows kullanıyormuşsun ama pythonun araştırdığım kadarıyla siz windowcular için de yerleşik bir modülü var sanırım, benim kodlar üzerinde l inux kullandığımdan deneme şansım yok ama şu sayfayı bir ziyaret edin belki işinizi görebilir https://gist.github.com/atupal/5865214