簡體   English   中英

在while(True)循環中,Python sys.stdin.read(1)始終執行1次獲取輸入,多次執行不獲取輸入

[英]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無限循環一次讀取一個字符?

問題可能是由於\\n持續存在而導致的stdin刷新。

作為替代,使用raw_input

while True:
    c = raw_input('please enter a character: ')
    print 'you entered', c

對於沖洗部分,看到

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM