May 30

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. Python logging 标准配置
  3. 软件体系结构模式-层
  4. 使用Python POST任意的HTTP数据以及使用Cookie
  5. PHP的continue 2

Written by ideawu at 2010-05-30 19:21:24 | Views: 4951 | tags:

Leave a Reply

必须登录, 或者浏览器开启JavaScript支持才可以评论!


网站空间,免费试用