Python从其他源连续读取stdin

标签 python bash stdin watch

是否可以允许Python从另一个源(例如文件)的stdin中连续读取?基本上,我试图允许我的脚本使用标准输入来回显输入,并且我想使用文件或外部源与其交互(同时保持打开状态)。

一个例子可能是(input.py):

#!/usr/bin/python

import sys

line = sys.stdin.readline()

while line:
    print line,
    line = sys.stdin.readline()

直接执行此操作,我可以连续输入文本,并且在脚本保持事件状态时它会回显。如果您想使用外部源,例如来自 bash 的文件或输入,则脚本在收到输入后立即退出:

$ echo "hello" | python input.py
hello
$

最终我想做的是:

$ tail -f file | python input.py

然后,如果文件更新,则 input.py 会回显在保持打开状态时添加到文件中的任何内容。也许我以错误的方式处理这个问题,或者我只是一无所知,但是有办法做到这一点吗?

最佳答案

使用 tail-F 选项,使其在文件被重命名或删除时重新打开该文件,并使用原始名称创建一个新文件。一些编辑器以这种方式编写文件,日志文件轮换脚本通常也以这种方式工作(它们将原始文件重命名为 filename.1,并创建一个新的日志文件)。

$ tail -F file | python input.py

关于Python从其他源连续读取stdin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35189535/

相关文章:

python - 保持嵌套字典中的输入顺序

bash - 如何使用 BASH 从文件名中删除特定字符

bash - 如何检查文件的大小是否大于 Bash 中的某个值

c++ - 如何从 C++ 的标准输入中读取 n 个整数?

python - 发送到python3中程序的标准输入

c++ - freopen 不适用于 C 标准输入

python - xlwings for Excel for Mac 2016

python - 一旦条件匹配就停止线程

python - 从 Django 中具有相同表名的多个数据库获取数据

bash - 理解 tty + bash