Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何迭代命令行上传递的所有文件行?_Python_Stdin - Fatal编程技术网

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

Python 如何迭代命令行上传递的所有文件行?,python,stdin,Python,Stdin,我通常在Perl中这样做: 随便什么.pl while(<>) { #do whatever; } while(){ #做任何事; } 然后cat foo.txt | whatever.pl 现在,我想用Python来做这件事。我尝试了sys.stdin,但我不知道如何使用Perl。如何读取输入?尝试以下操作: import fileinput for line in fileinput.input(): process(line) 大概是这样的: import

我通常在Perl中这样做:

随便什么.pl

while(<>) {
    #do whatever;
}
while(){
#做任何事;
}
然后
cat foo.txt | whatever.pl

现在,我想用Python来做这件事。我尝试了
sys.stdin
,但我不知道如何使用Perl。如何读取输入?

尝试以下操作:

import fileinput
for line in fileinput.input():
    process(line)
大概是这样的:

import sys

for line in sys.stdin:
    # whatever

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

import sys

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

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

这种方法很好,因为main完全依赖于它的输入,您可以使用任何符合行分隔输入流范式的东西对它进行单元测试

+1这种方式比“for line in sys.stdin”更灵活,因为它将用于作为cmd行参数传递的文件名。-1:main返回None——不完全清楚应该返回给操作系统的值。我通常是这样做的,但它只在stdin上迭代,而OP希望迭代命令行上命名的所有文件。对于这种用例,fileinput是一种方法。
import sys

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

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

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