如何迭代命令行上传递的所有文件行?

时间:2009-04-03 19:15:37

标签: python stdin

我通常在Perl中这样做:

whatever.pl

while(<>) {
    #do whatever;
}

然后cat foo.txt | whatever.pl

现在,我想在Python中执行此操作。我试过sys.stdin,但我不知道怎么做,就像我在Perl中所做的那样。我该如何阅读输入?

5 个答案:

答案 0 :(得分:41)

试试这个:

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

答案 1 :(得分:12)

import sys
def main():
    for line in sys.stdin:
        print line
if __name__=='__main__':
    sys.exit(main())

答案 2 :(得分:6)

这样的事情:

import sys

for line in sys.stdin:
    # whatever

答案 3 :(得分:3)

import sys

for line in sys.stdin:
    # do stuff w/line

答案 4 :(得分:0)

我讨厌打败一匹死马,但我建议使用纯函数吗?

import sys

def main(stdin):
  for line in stdin:
    print("You said: " + line.strip())

if __name__ == "__main__":
  main(sys.stdin)

这种方法很好,因为main完全依赖于其输入,并且您可以使用符合行定界输入流范式的任何方法对其进行单元测试。