2010-05-30

Windows Python select标准输入输出

Views: 22945 | Add Comments

Windows 版本的 Python, select() 函数只能接受 socket, 不接受 File Object, 所以不能 select 标准输入输出.

为此, 我开发了 win_stdio, 让 select 也能对 stdin/stdout 进行操作. 核心思想就是用 socket 作为 stdin/stdout 的代理. 结构示意如下:

stdin -> stdin_sock -> my_stdin
stdout <- stdout_sock <- my_stdout

my_stdin 和 my_stdout 是 socket, 所以它们的 fileno 就可以用于 select 了.

首先一个线程读取 stdin, 写入 stdin_sock:

while True:
	data = os.read(sys.stdin.fileno(), 1024)
	if not data:
		break
	stdin_sock.send(data)

另一个线程读取 stdout_sock, 写入 stdout:

fd = sys.stdout.fileno()
while True:
	data = my_stdout.recv(1024)
	if not data:
		break
	os.write(sys.stdout.fileno(), data)

win_stdio 的一个实际例子如下:

from stdio import stdio
stdio.write('hello world')
data = stdio.read()
print stdio.STDIN_FILENO
print stdio.STDOUT_FILENO

下载: win_stdio.zip

Related posts:

  1. 最简单的JavaScript两级联动示例
  2. 结合IO多路复用的多线程服务器模型
  3. PHP 解码 C 字符串
  4. Python logging 标准配置
  5. Redis 导数据的 PHP 脚本
Posted by ideawu at 2010-05-30 19:21:24 Tags:

Leave a Comment