Belki PyDev'de çalışırken sys.stdin.read
kullanın? sys.stdin.read(1)
gibi girişten 1 satır oku ... Windows konsolunda ve PyDev'de kullanmak, os ve run türevlerine göre aynı seçimi yapar (sys.stdin.isatty
kullanarak). Örneğin bir sonraki kod, zaman ayarlı kullanıcı girdisini okur.
import sys, time
import platform
if platform.system() == "Windows":
import msvcrt
else:
from select import select
def input_with_timeout_sane(prompt, timeout, default):
"""Read an input from the user or timeout"""
print prompt,
sys.stdout.flush()
rlist, _, _ = select([sys.stdin], [], [], timeout)
if rlist:
s = sys.stdin.readline().replace('\n','')
else:
s = default
print s
return s
def input_with_timeout_windows(prompt, timeout, default):
start_time = time.time()
print prompt,
sys.stdout.flush()
input = ''
read_f=msvcrt.getche
input_check=msvcrt.kbhit
if not sys.stdin.isatty():
read_f=lambda:sys.stdin.read(1)
input_check=lambda:True
while True:
if input_check():
chr_or_str = read_f()
try:
if ord(chr_or_str) == 13: # enter_key
break
elif ord(chr_or_str) >= 32: #space_char
input += chr_or_str
except:
input=chr_or_str
break #read line,not char...
if len(input) == 0 and (time.time() - start_time) > timeout:
break
if len(input) > 0:
return input
else:
return default
def input_with_timeout(prompt, timeout, default=''):
if platform.system() == "Windows":
return input_with_timeout_windows(prompt, timeout, default)
else:
return input_with_timeout_sane(prompt, timeout, default)
print "\nAnswer is:"+input_with_timeout("test?",10,"no input entered")
gerçekten mümkün değildir: Windows konsolunda çalıştırdığınızda Fakat programın standart girdi, sonra başka bir programın standart çıktısını
sys.stdin.read
değilmsvcrt.getch
ile okunansys.stdin.isatty
dönerFalse
ve giriş yöneltilen eğer. Bakınız: https://stackoverflow.com/a/46303939/110451 –