2014-02-22 20 views
2

我在想如何从一个文件(例如sys.stdin)中读取一个(可能是多字节)字符,而不必等待任何进一步的字符,行尾或文件的结尾。主要用途是能够在字符可用时立即从标准输入读取。读取单个字符(不是字节)而不等待行结束或EOF在Python中

我主要使用Python 3

下面的代码说明一种方式,C,要做到这一点,在读取字符仅仅是立即打印到标准输出再次:

#include <stdio.h> 
#include <wchar.h> 
#include <locale.h> 

int main(void) 
{ 
    setlocale(LC_CTYPE, ""); 
    wint_t wc; 
    while ((wc = fgetwc(stdin)) != WEOF) 
    { 
     fputwc(wc, stdout); 
    } 
} 
+1

在Win:http://stackoverflow.com/questions/3523174/raw-input-in-python-without-pressing-enter –

回答

2

像这样的东西?

import sys 
import functools 
for c in iter(functools.partial(sys.stdin.read, 1), ''): 
    print(c) 
+1

我觉得OP想要读字符,而不是简单的字节'read'确实。 – halex

+0

从我可以告诉这实际上工作!但是如何?根据我的理解,sys.stdin.read(1)会读取一个字节,然后调用它,直到它返回“'。为什么在读取(多字节)字符后返回'''? “iter”对象如何知道如何从单个字节构造一个有效的多字节字符串? – Quantumboredom

+1

@Quantumboredom'file.read'在没有剩下要读的时候返回'''',即在EOF时。所以,这段代码从stdin中读取一个字节直到EOF。上面的代码实际上相当于:'c = sys.stdin.read(1); while c!='':c = sys.stdin.read(1)' –

相关问题