代码之家  ›  专栏  ›  技术社区  ›  flybywire

如何用python编写unix筛选器?

  •  12
  • flybywire  · 技术社区  · 15 年前

    x 来自stdin。

    4 回复  |  直到 15 年前
        1
  •  15
  •   Jed Smith    15 年前

    阅读 sys.stdin sys.stdout (或使用 print ).您的示例程序:

    import sys
    
    for line in sys.stdin:
        print line.replace("x", ""),
    

    没有一种标准的方法可以使stdin无缓冲,你也不希望这样。让操作系统缓冲它。

        2
  •  14
  •   Community CDub    7 年前

    你可以使用 fileinput class

    import fileinput
    for line in fileinput.input():
        process(line)
    

    print line.replace('x','') .

    你可以跟着 this StackOverflow question 了解如何解除缓冲。或者你可以直接打电话 sys.stdout.flush() print .

        3
  •  6
  •   Mike Boers    15 年前

    我不知道你在这个上下文中所说的缓冲是什么意思,但是按照你的要求去做是非常简单的。。。

    import time
    import sys
    while True:
        for char in 'abcdefx':
            sys.stdout.write(char)
            sys.stdout.flush()
            time.sleep(0.1)
    

    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 看看它能做什么。

        4
  •  3
  •   EmFi    15 年前

    使用python解释器的-u开关使所有读写都无缓冲。类似于设置 $| = true; 在Perl中。然后继续你想做的,读一行修改它,然后打印它。sys.stdout.flush()不是必需的。

    #!/path/to/python -u
    
    import sys
    
    for line in sys.stdin:
        process_line(line)