【问题标题】:python error sys.stdin pipepython错误sys.stdin管道
【发布时间】:2013-11-17 22:30:51
【问题描述】:

我在 google 中查找了很多示例,但没有任何工作,我打印到一个通过出口管道 ms-dos 的文件,但这会给我一个错误,好像我的文件无法读取 sys.stdin,我把代码:

import sys
line = sys.stdin
for l in line.read():
   print l

和 ms-dos 我写如下:

ping 127.0.0.1 | pipetest.py

上面的控制台显示我在“for”行中有错误并显示:

IOError: [Errno 9] 错误的文件描述符

我用的是python2.7,还有windows。

【问题讨论】:

    标签: python subprocess pipe sys


    【解决方案1】:

    代替

    ping 127.0.0.1 | pipetest.py
    

    试试

    ping 127.0.0.1 | python pipetest.py
    

    另外考虑其他建议,你可能不需要 .read()

    【讨论】:

    【解决方案2】:

    这行得通:

    import sys
    lines = sys.stdin
    for l in lines:
       print l
    

    但是,由于 Python 迭代文件的方式,您可能会遇到缓冲问题。如果你想立即阅读每一行,你应该使用 readline() 代替:

    import sys
    lines = sys.stdin
    for l in iter(lines.readline, ''):
        print l
    

    【讨论】:

    • 它不能修复"Bad file descriptor" 错误。顺便说一句,您可以使用 for line in iter(sys.stdin.readline, ''): print line, 而不是 while 循环。
    • 已编辑,谢谢。我在 Windows 7 上没有收到“错误的文件描述符”,不知道该怎么做。
    【解决方案3】:

    代码正确:ping 127.0.0.1 | python pipetest.py

    感谢安德里斯

    【讨论】:

    猜你喜欢
    • 2017-06-15
    • 2013-04-23
    • 1970-01-01
    • 2019-12-18
    • 1970-01-01
    • 1970-01-01
    • 2016-04-25
    • 2020-01-07
    • 2018-12-18
    相关资源
    最近更新 更多