<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>idea&#039;s blog &#187; IO多路复用</title>
	<atom:link href="http://www.ideawu.net/blog/tag/io%e5%a4%9a%e8%b7%af%e5%a4%8d%e7%94%a8/feed" rel="self" type="application/rss+xml" />
	<link>http://www.ideawu.net/blog</link>
	<description>网络服务器架构, Linux C/C++服务器端开发, TCP/IP网络协议, PHP Web后端和Web前端开发, 网站架构.</description>
	<lastBuildDate>Wed, 08 Feb 2012 10:02:48 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Windows Python select标准输入输出</title>
		<link>http://www.ideawu.net/blog/archives/508.html</link>
		<comments>http://www.ideawu.net/blog/archives/508.html#comments</comments>
		<pubDate>Sun, 30 May 2010 11:21:24 +0000</pubDate>
		<dc:creator>ideawu</dc:creator>
				<category><![CDATA[Computer System]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[IO多路复用]]></category>

		<guid isPermaLink="false">http://www.ideawu.net/blog/?p=508</guid>
		<description><![CDATA[<p>Windows 版本的 Python, select() 函数只能接受 socket, <a href="http://docs.python.org/library/select.html#select.select">不接受 File Object</a>, 所以不能 select 标准输入输出.</p>
<p>为此, 我开发了 win_stdio, 让 select 也能对 stdin/stdout 进行操作. 核心思想就是用 <a href="http://docs.python.org/library/socket.html">socket</a> 作为 stdin/stdout 的代理. 结构示意如下:</p>
<pre>
stdin -&gt; stdin_sock -&gt; my_stdin
stdout &lt;- stdout_sock &lt;- my_stdout
</pre>
<p><span id="more-508"></span>my_stdin 和 my_stdout 是 socket, 所以它们的 fileno 就可以用于 select 了.</p>
<p>首先一个线程读取 stdin, 写入 stdin_sock:</p>
<pre>
while True:
	data = os.read(sys.stdin.fileno(), 1024)
	if not data:
		break
	stdin_sock.send(data)
</pre>
<p>另一个线程读取 stdout_sock, 写入 stdout:</p>
<pre>
fd = sys.stdout.fileno()
while True:
	data = my_stdout.recv(1024)
	if not data:
		break
	os.write(sys.stdout.fileno(), data)
</pre>
<p>win_stdio 的一个实际例子如下:</p>
<pre>
from stdio import stdio
stdio.write('hello world')
data = stdio.read()
print stdio.STDIN_FILENO
print stdio.STDOUT_FILENO
</pre>
<p>下载: <a href='http://www.ideawu.net/blog/wp-content/uploads/2010/05/win_stdio.zip'>win_stdio.zip</a></p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/434.html' rel='bookmark' title='Permanent Link: 最简单的JavaScript两级联动示例'>最简单的JavaScript两级联动示例</a></li>
<li><a href='http://www.ideawu.net/blog/archives/624.html' rel='bookmark' title='Permanent Link: Python logging 标准配置'>Python logging 标准配置</a></li>
<li><a href='http://www.ideawu.net/blog/archives/267.html' rel='bookmark' title='Permanent Link: 软件体系结构模式-层'>软件体系结构模式-层</a></li>
<li><a href='http://www.ideawu.net/blog/archives/270.html' rel='bookmark' title='Permanent Link: 使用Python POST任意的HTTP数据以及使用Cookie'>使用Python POST任意的HTTP数据以及使用Cookie</a></li>
<li><a href='http://www.ideawu.net/blog/archives/582.html' rel='bookmark' title='Permanent Link: PHP的continue 2'>PHP的continue 2</a></li>
</ol><div><p><img src="http://www.ideawu.net/favicon.ico" /> 你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/508.html" title="Windows Python select标准输入输出">Windows Python select标准输入输出</a></p>

<div>
	<a href="http://www.benegg.com/linode-ad.php">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></description>
			<content:encoded><![CDATA[<p>Windows 版本的 Python, select() 函数只能接受 socket, <a href="http://docs.python.org/library/select.html#select.select">不接受 File Object</a>, 所以不能 select 标准输入输出.</p>
<p>为此, 我开发了 win_stdio, 让 select 也能对 stdin/stdout 进行操作. 核心思想就是用 <a href="http://docs.python.org/library/socket.html">socket</a> 作为 stdin/stdout 的代理. 结构示意如下:</p>
<pre>
stdin -&gt; stdin_sock -&gt; my_stdin
stdout &lt;- stdout_sock &lt;- my_stdout
</pre>
<p><span id="more-508"></span>my_stdin 和 my_stdout 是 socket, 所以它们的 fileno 就可以用于 select 了.</p>
<p>首先一个线程读取 stdin, 写入 stdin_sock:</p>
<pre>
while True:
	data = os.read(sys.stdin.fileno(), 1024)
	if not data:
		break
	stdin_sock.send(data)
</pre>
<p>另一个线程读取 stdout_sock, 写入 stdout:</p>
<pre>
fd = sys.stdout.fileno()
while True:
	data = my_stdout.recv(1024)
	if not data:
		break
	os.write(sys.stdout.fileno(), data)
</pre>
<p>win_stdio 的一个实际例子如下:</p>
<pre>
from stdio import stdio
stdio.write('hello world')
data = stdio.read()
print stdio.STDIN_FILENO
print stdio.STDOUT_FILENO
</pre>
<p>下载: <a href='http://www.ideawu.net/blog/wp-content/uploads/2010/05/win_stdio.zip'>win_stdio.zip</a></p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/434.html' rel='bookmark' title='Permanent Link: 最简单的JavaScript两级联动示例'>最简单的JavaScript两级联动示例</a></li>
<li><a href='http://www.ideawu.net/blog/archives/624.html' rel='bookmark' title='Permanent Link: Python logging 标准配置'>Python logging 标准配置</a></li>
<li><a href='http://www.ideawu.net/blog/archives/267.html' rel='bookmark' title='Permanent Link: 软件体系结构模式-层'>软件体系结构模式-层</a></li>
<li><a href='http://www.ideawu.net/blog/archives/270.html' rel='bookmark' title='Permanent Link: 使用Python POST任意的HTTP数据以及使用Cookie'>使用Python POST任意的HTTP数据以及使用Cookie</a></li>
<li><a href='http://www.ideawu.net/blog/archives/582.html' rel='bookmark' title='Permanent Link: PHP的continue 2'>PHP的continue 2</a></li>
</ol><div><p><img src="http://www.ideawu.net/favicon.ico" /> 你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/508.html" title="Windows Python select标准输入输出">Windows Python select标准输入输出</a></p>

<div>
	<a href="http://www.benegg.com/linode-ad.php">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></content:encoded>
			<wfw:commentRss>http://www.ideawu.net/blog/archives/508.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

