我想写一个程序,读取标准输入(无缓冲)并写入标准输出(无缓冲)做一些简单的逐字符转换。为了示例的目的,假设我想从stdin中删除所有字符x
。如何在python中编写unix过滤器?
回答
我并不确切地知道你在这方面缓冲的意思,但它是非常简单的事你问...
so_gen.py(产生恒定流,我们可以看) :
import time
import sys
while True:
for char in 'abcdefx':
sys.stdout.write(char)
sys.stdout.flush()
time.sleep(0.1)
so_filter.py(做什么你问):
import sys
while True:
char = sys.stdin.read(1)
if not char:
break
if char != 'x':
sys.stdout.write(char)
sys.stdout.flush()
尝试运行python so_gen.py | python so_filter.py
来看看会发生什么。
从sys.stdin
中读取并写入sys.stdout
(或使用print
)。你的示例程序:
import sys
for line in sys.stdin:
print line.replace("x", ""),
有没有一种标准的方法来使标准输入缓冲,你不想这样。让OS缓冲它。
他确实说“没有缓冲”,但我不确定它真的很重要。 – 2009-10-19 17:29:59
我按照你的评论编辑了我的答案。 – 2009-10-19 17:30:49
您可以使用fileinput
class,它可以让您像Perl钻石操作员那样处理输入。从文档:
import fileinput
for line in fileinput.input():
process(line)
其中进程做类似print line.replace('x','')
。
您可以按照this StackOverflow question了解如何取消缓冲标准输出。或者您可以在每个print
之后致电sys.stdout.flush()
。
啊!这使得我所做的所有额外工作,因为我错过了Perl!我需要非常仔细地浏览Python标准库。 – 2009-10-19 17:42:05
为python解释器使用-u开关以使所有读取和写入无缓冲。类似于在Perl中设置$| = true;
。然后继续进行,读取一行修改它然后打印它。 sys.stdout.flush()不是必需的。
#!/path/to/python -u
import sys
for line in sys.stdin:
process_line(line)
这里不工作... – 2011-02-28 17:45:30
- 1. 使用bash编写Unix过滤器
- 2. 如何编写此过滤器?
- 3. 如何编写响应过滤器?
- 4. 如何在Django中编写请求过滤器/预处理器
- 5. 在Python中编码循环过滤器
- 6. 如何在Django中编写多个过滤器
- 7. 如何在弹簧安全中编写自定义过滤器?
- 8. 如何写过滤器内
- 9. 如何在unix中编写addtion程序
- 10. Unix“包装”过滤器
- 11. Java的UNIX过滤器
- 12. 如何过滤unix中的列
- 13. 在Java中编写unix kill
- 14. 如何为mobilefirst 8.0 java适配器编写全局过滤器
- 15. 如何为所有控制器编写动作过滤器
- 16. 过滤器过滤列表在Python 3
- 17. 编写的Direct Show源过滤器
- 18. 编写一个ostream过滤器?
- 19. 编写LDAP查询过滤器
- 20. 如何在Python中编写采样信号的低通滤波器?
- 21. 如何在SSRS中编写表达式来过滤数据
- 22. 如何在TFS中编写过滤表达式
- 23. 如何为xp编写音频过滤器驱动程序
- 24. 如何使用Highland.js编写过滤器(使用数据库)
- 25. 如何编写地图,过滤器,缩小等高阶函数?
- 26. 如何编写directshow过滤器来处理两个输入源?
- 27. 若要通用搜索过滤器如何编写
- 28. 如何编写自己的捕捉过滤器?
- 29. 如何使用ArrayAdapter为ListView编写自定义过滤器
- 30. 如何编写HAML自定义过滤器?
获胜者写作如果不是char:break' – flybywire 2009-10-19 17:45:45
@flybywire:他的回答需要它,没有其他答案...... – 2009-10-19 18:00:27