python - 从管道读取 Python 标准输入,不阻塞空输入

标签 python pipe stdin blocking nonblocking

我试图在从管道接收时读取 Python 脚本中的 stdin。

我使用了这些行:

for line in sys.stdin:
    print line

并运行脚本:echo "test" | script.py
到目前为止它工作正常。但是,如果我不使用管道,程序会停留在 for命令。意思是调用:./script.py会使脚本不起作用。我怎样才能解决这个问题?

最佳答案

编辑:在这种情况下,您显然甚至不希望它读取行或处理 KeyboardInterrupt ,所以你需要做的是检查空 stdin .检查您是否是终端并按编辑后的示例所示通过。
sys.stdin是类文件。尝试:

if not sys.stdin.isatty():
    data = sys.stdin.readlines()
    # Do something with data

如果你在没有 stdin 的情况下运行它我不认为它会像以前那样卡在你身上...因为 sys.stdin将是空的。然后该功能应继续。

关于python - 从管道读取 Python 标准输入,不阻塞空输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53541223/

相关文章:

python - 在 zip 存档中打开二进制文件作为 ZipExtFile

c - 排序程序如何遇到EOF?

python - stdout=subprocess.PIPE 和 stdout=PIPE 之间的区别

Python 子进程输入被读取两次

swift - 进程无法从 Swift 中的标准输入读取

python - 如何通过 Trello API 发布和检索评论卡数据?

python - 如何将新字典名称作为参数传递给 Python 中的函数?

python - 使用另一个列表的元素过滤列表 - Python

c - 逐个元素读取有效,但读取 block 则无效

batch-file - 捕获通过管道传输到批处理文件的真正 STDIN