我想写一个程序,读取标准input(无缓冲),并写入标准输出(无缓冲)做一些简单的逐字符转换。 为了这个例子,让我们说我想从标准input删除所有的字符x 。
是否有可能从日志中删除一些键值对?
我不确切地知道你在这方面缓冲的意思,但是做你正在问的事很简单。
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 python so_gen.py | python so_filter.py来看看它做了什么。
从sys.stdin读取并写入sys.stdout (或使用print )。 您的示例程序:
import sys for line in sys.stdin: print line.replace("x",""),
没有一个标准的方式来使stdin无缓冲,你不想这样做。 让OS缓冲它。
您可以使用fileinput类 ,它允许您像Perl钻石操作员那样处理输入。 从文档:
import fileinput for line in fileinput.input(): process(line)
在哪里进程做一些像print line.replace('x','') 。
你可以按照这个StackOverflow的问题 ,如何解除标准输出。 或者您可以在每次print后调用sys.stdout.flush() 。
使用-u开关为python解释器使所有读取和写入无缓冲。 类似于设置$| = true; $| = true; 在Perl中。 然后继续,读取一行修改它,然后打印它。 sys.stdout.flush()不是必需的。
#!/path/to/python -u import sys for line in sys.stdin: process_line(line)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。