在python中使用管道数据

时间:2013-03-08 22:01:02

标签: python stdin piping

我正在开发一个与bash' wc'完全相同的python 3项目。 (字数统计)命令。输入格式如下:

$ python3 myWC.py < fileName.txt

我想使用给定的文件来计算文件中的字节,单词和行并打印它们。我尝试过使用stdin,但即使是简单的print()语句也似乎是打印stdin的对象而不是给出的实际字符串。有人可以给我一些关于Python 3中基本stdin可用性的指导吗?谢谢!

如下所述,我正在使用&#39;&gt;&#39;而不是&#39;而不是&#39;但是现在当我运行这段代码时:

import sys

def main():
        word = sys.stdin.readline()
        print(word)

main()

我只是在终端

中得到一个空行作为输出

3 个答案:

答案 0 :(得分:4)

扩展我上面的评论,我会说下面的代码可以解决问题(注意:这不是Python 3,而是Python 2.7。一些快速谷歌搜索告诉我它们在这方面相似)。

在echo.py中:

import sys
print sys.stdin.read()

然后在您的终端中呼叫它:

python echo.py < test.txt

这应该回显终端上test.txt的内容。

答案 1 :(得分:0)

How do you read from stdin in Python?

中介绍了如何处理python中的输入

您输入的第一行可能为空,您只读一行,请尝试:

import sys
for line in sys.stdio:
    print line

另外我应该提一下* nix样式实用程序模块文件输入值得一看。

答案 2 :(得分:0)

与重定向不同的方法:使用fileinput

# myWC.py
def main():
    for line in fileinput.input():
        # Do something with the line

main()

如何调用:

python myWC.py filename.txt # One file
python myWC.py file1.txt file2.txt file3.txt # multiple files

讨论

  • fileinput负责打开文件的所有细节,为您逐行阅读
  • 您可以从命令行指定多个输入文件
  • 有关详细信息,请参阅doc,尤其是fileinput.filename()fileinput.lineno(),...