[英]Python sys.stdin.read(1) in a while(True) loop consistently executes 1 time getting input and multiple times not getting input
我在64位Windows 7上運行python 2.7。
這是我正在執行的代碼:
import sys
while True:
print 'please enter a character:'
c = sys.stdin.read(1)
print 'you entered', str(c)
在Eclipse的PyDev環境中,我得到以下輸出,分別輸入a和b。
please enter a character:
a
you entered a
please enter a character:
you entered
please enter a character:
you entered
please enter a character:
b
you entered b
please enter a character:
you entered
please enter a character:
you entered
please enter a character:
它正確地獲取一次輸入,然后執行兩次以跳過用戶輸入。
現在,當我在python終端中為輸入a和b運行相同的代碼時,得到以下輸出:
enter char
a
you entered a
enter char
you entered
enter char
b
you entered b
enter char
you entered
enter char
一旦獲得用戶輸入並跳過用戶輸入,就會執行此操作。
是什么導致此問題? 如何使Python無限循環一次讀取一個字符?
sys.stdin
默認情況下是行緩沖的,即,您的sys.stdin.read(1)
在stdin緩沖區中沒有完整行之前不會返回。
這意味着,如果您輸入一個字符並按Enter鍵,那么在使用sys.stdin.read(1)
獲得第一個字符后, sys.stdin.read(1)
有一個換行符(一個或兩個字符: os.linesep
),該換行符會立即在命令行上讀取。下一個循環迭代。
您可以一次只讀取一個字符 ( msvcrt.getch()
)來避免按下Enter鍵 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.