Python中文
首页
教程
问答
标签
搜索
登录
注册
如何用Python正确地编写FIFOs?
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>当我在Python中打开FIFOs(命名管道)进行编写时,发生了一些非常奇怪的事情。考虑一下当我试图打开FIFO以便在交互式解释器中写入时会发生什么:</p> <pre><code>>>> fifo_write = open('fifo', 'w') </code></pre> <p>在我打开另一个解释器并键入以下内容之前,上述行将被阻塞:</p> <pre><code>>>> fifo_read = open('fifo', 'r') >>> fifo.read() </code></pre> <p>我不明白为什么我要等管道打开才能阅读,但让我们跳过这个。上面的代码将被阻塞,直到出现预期的可用数据。但是,假设我返回到第一个解释器窗口并键入:</p> <pre><code>>>> fifo_write.write("some testing data\n") >>> fifo_write.flush() </code></pre> <p>预期的行为是,在第二个解释器上,对<code>read</code>的调用将返回,我们将在屏幕上看到数据,但我没有遇到这种情况。如果我调用<code>os.fsync</code>,将发生以下情况:</p> <pre><code>>>> import os >>> fifo_write.flush() >>> os.fsync(fifo_write.fileno()) Traceback (most recent call last): File "<stdin>", line 1, in <module> OSError: [Errno 22] Invalid argument </code></pre> <p>fifo阅读器还在等着呢。但是,如果我调用<code>fifo_writer.close()</code>,那么数据将被刷新。如果我使用shell命令来给管道供水:</p> <pre><code>$ echo "some data" > fifo </code></pre> <p>那么读卡器输出是:</p> <pre><code>>>> fifo_read.read() 'some data\n' </code></pre> <p>有人经历过吗?如果是的话,有没有解决办法?我现在的操作系统是Ubuntu11.04和Linux2.6.38。</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>在到达EOF之前,<code>read()</code>不会返回。</p> <p>您可以尝试指定要读取的字节数,例如<code>read(4)</code>。在写入足够的字节之前,这仍然会阻塞,因此生产者必须至少写入那么多字节,然后调用<code>flush()</code>。</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
无法使用Django/mongoengine连接到MongoDB(身份验证失败)
9 回答
无法使用Django\u mssql\u后端迁移到外部hos
6 回答
无法使用Django&Python3.4连接到MySql
7 回答
无法使用Django+nginx上载媒体文件
8 回答
无法使用Django1.6导入名称模式
1 回答
无法使用Django1.7和mongodb登录管理站点
3 回答
无法使用Djangoadmin创建项目,进程使用了错误的路径,因为我事先安装了错误的Python
2 回答
无法使用Djangockedi验证CBV中的字段
1 回答
无法使用Djangocketditor上载图像(错误400)
7 回答
无法使用Djangocron进行函数调用
7 回答
无法使用Djangofiler djang上载文件
3 回答
无法使用Djangokronos
6 回答
无法使用Djangomssql provid
9 回答
无法使用Djangomssql连接到带有Django 1.11的MS SQL Server 2016
9 回答
无法使用Djangomssq迁移Django数据库
1 回答
无法使用Djangonox创建用户
7 回答
无法使用Djangopyodb从Django查询SQL Server
2 回答
无法使用Djangopython3ldap连接到ldap
2 回答
无法使用Djangoredis连接到redis
1 回答
无法使用Django中的FK创建新表
2 回答